首页
3D照片墙
统计
留言
Search
1
1.OAuth 的简单理解
115 阅读
2
多个拦截器的执行顺序
105 阅读
3
基于Annotation方式的声明式事务
102 阅读
4
6.设计模式汇总
101 阅读
5
Unity 依赖注入
98 阅读
Java
JDBC
Spring
Spring MVC
SpringBoot
SpringCloud
MybatisPlus
Mybatis
Maven
SpringSecurity
JVM
java注解与反射
Java JUC并发编程
SSM
.NET
IdentityServer4
EF
.Net Core
AbpVNext + DDD
.NET MVC Api
前端
Jquery&JavaScript
uniapp
VUE
Echars
Vue底层原理
Python
Django
软考笔记
软件设计师
1.计算机组成与体系结构
10.面向对象技术
11.UML类图建模
12.面向对象程序设计
13.数据结构
14.算法基础
16.知识产权标准化
17.程序设计语言
2.操作系统
3.数据库
4.数据库设计
5.计算机网络
6.信息安全
7.系统开发基础
8.项目管理
9.数据流图
架构设计
CQRS架构
DDD架构
数据库技术
SQL锁
SqlServer
Oracle 主从备份
Oracle RAC集群
Mysql
云原生/容器技术
kubernetes
Docker
数据结构与算法
常用中间件
Redis
RabbitMQ 消息队列
ElasticSearch
其他
PHP
OAuth 2.0
WebSocket
ArkTs Harmony 开发
运维
Search
标签搜索
排序算法
vue
算法
遍历
docker
线性
数组
dom
synchronized
数据库
xml语言
log4j
bigint
静态函数
静态方法
哈夫曼树
const
冒泡排序
商标设计
命令模式
Bi8bo
累计撰写
304
篇文章
累计收到
6
条评论
首页
栏目
Java
JDBC
Spring
Spring MVC
SpringBoot
SpringCloud
MybatisPlus
Mybatis
Maven
SpringSecurity
JVM
java注解与反射
Java JUC并发编程
SSM
.NET
IdentityServer4
EF
.Net Core
AbpVNext + DDD
.NET MVC Api
前端
Jquery&JavaScript
uniapp
VUE
Echars
Vue底层原理
Python
Django
软考笔记
软件设计师
1.计算机组成与体系结构
10.面向对象技术
11.UML类图建模
12.面向对象程序设计
13.数据结构
14.算法基础
16.知识产权标准化
17.程序设计语言
2.操作系统
3.数据库
4.数据库设计
5.计算机网络
6.信息安全
7.系统开发基础
8.项目管理
9.数据流图
架构设计
CQRS架构
DDD架构
数据库技术
SQL锁
SqlServer
Oracle 主从备份
Oracle RAC集群
Mysql
云原生/容器技术
kubernetes
Docker
数据结构与算法
常用中间件
Redis
RabbitMQ 消息队列
ElasticSearch
其他
PHP
OAuth 2.0
WebSocket
ArkTs Harmony 开发
运维
页面
3D照片墙
统计
留言
搜索到
3
篇与
的结果
2024-10-05
SpringBoot 添加 SpringSecurity 支持
@EnableWebSecurity 开启SpringSecurity服务 //继承WebSecurityConfigureAdapter类 //授权 ------------------------------------- //重写 configure(HttpSecurity http)//方法 http.authorizeRequest() //请求授权 .antMatchers()//匹配路径 .hasRole("角色") //没有权限就跳转登录界面 默认跳转url:/login 默认登录错误url:/login?error http.formLogin() //开启注销 http.logout() //注销成功跳转login?success .invalidateHttpSession() 失效所有session //认证-------------------------------------- //重写 configure(AuthenticationBuilder auth)//方法 //SpringSecurity链式书写 auth.inMemoryAuthentication() //在内存中认证 .withUser("用户名").password("").roles("角色") .and().withUser() //继续 //Spring Security 5+ 需要密码加密 PasswordEncoder auth.inMemoryAuthentication() .passwordEncoder(new BCryptPasswordEncoder()) //官方推荐的编码方式 .withUser("用户名").password(new BCryptPasswordEncoder().encode("密码")) //编码 JDBC权限验证
2024年10月05日
43 阅读
0 评论
77 点赞
2023-01-21
SpringSecurity简单搭建
- 添加 Spring Security 依赖 首先我默认大家都已经了解 Spring Boot 了,在 Spring Boot 项目中添加依赖是非常简单的.把对应的 spring-boot-starter-*** 加到pom.xml 文件中就行了 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> 简单的使用 Spring Security 只要配置三个类就完成了,分别是: UserDetails 这个接口中规定了用户的几个必须要有的方法 public interface UserDetails extends Serializable { //返回分配给用户的角色列表 Collection<? extends GrantedAuthority> getAuthorities(); //返回密码 String getPassword(); //返回帐号 String getUsername(); // 账户是否未过期 boolean isAccountNonExpired(); // 账户是否未锁定 boolean isAccountNonLocked(); // 密码是否未过期 boolean isCredentialsNonExpired(); // 账户是否激活 boolean isEnabled(); } UserDetailsService 这个接口只有一个方法 loadUserByUsername,是提供一种用 用户名 查询用户并返回的方法。 public interface UserDetailsService { UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException; } WebSecurityConfigurerAdapter 这个内容很多,就不贴代码了,大家可以自己去看. 我们创建三个类分别继承上述三个接口 此 User 类不是我们的数据库里的用户类,是用来安全服务的. * Created by Yuicon on 2017/5/14. * https://segmentfault.com/u/yuicon */ public class User implements UserDetails { private final String id; //帐号,这里是我数据库里的字段 private final String account; //密码 private final String password; //角色集合 private final Collection<? extends GrantedAuthority> authorities; User(String id, String account, String password, Collection<? extends GrantedAuthority> authorities) { this.id = id; this.account = account; this.password = password; this.authorities = authorities; } //返回分配给用户的角色列表 @Override public Collection<? extends GrantedAuthority> getAuthorities() { return authorities; } @JsonIgnore public String getId() { return id; } @JsonIgnore @Override public String getPassword() { return password; } //虽然我数据库里的字段是 `account` ,这里还是要写成 `getUsername()`,因为是继承的接口 @Override public String getUsername() { return account; } // 账户是否未过期 @JsonIgnore @Override public boolean isAccountNonExpired() { return true; } // 账户是否未锁定 @JsonIgnore @Override public boolean isAccountNonLocked() { return true; } // 密码是否未过期 @JsonIgnore @Override public boolean isCredentialsNonExpired() { return true; } // 账户是否激活 @JsonIgnore @Override public boolean isEnabled() { return true; } } 继承 Created by Yuicon on 2017/5/14. https://segmentfault.com/u/yuicon */ @Service public class UserDetailsServiceImpl implements UserDetailsService { // jpa @Autowired private UserRepository userRepository; /** 提供一种从用户名可以查到用户并返回的方法 @param account 帐号 @return UserDetails @throws UsernameNotFoundException */ @Override public UserDetails loadUserByUsername(String account) throws UsernameNotFoundException { // 这里是数据库里的用户类 User user = userRepository.findByAccount(account); if (user == null) { throw new UsernameNotFoundException(String.format(没有该用户 '%s'., account)); } else { //这里返回上面继承了 UserDetails 接口的用户类,为了简单我们写个工厂类 return UserFactory.create(user); } } } UserDetails 工厂类 Created by Yuicon on 2017/5/14. https://segmentfault.com/u/yuicon */ final class UserFactory { private UserFactory() { } static User create(User user) { return new User( user.getId(), user.getAccount(), user.getPassword(), mapToGrantedAuthorities(user.getRoles().stream().map(Role::getName).collect(Collectors.toList())) ); } //将与用户类一对多的角色类的名称集合转换为 GrantedAuthority 集合 private static List<GrantedAuthority> mapToGrantedAuthorities(List<String> authorities) { return authorities.stream() .map(SimpleGrantedAuthority::new) .collect(Collectors.toList()); } } 重点, 继承 WebSecurityConfigurerAdapter 类 Created by Yuicon on 2017/5/14. https://segmentfault.com/u/yuicon */ @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class WebSecurityConfig extends WebSecurityConfigurerAdapter { // Spring会自动寻找实现接口的类注入,会找到我们的 UserDetailsServiceImpl 类 @Autowired private UserDetailsService userDetailsService; @Autowired public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { authenticationManagerBuilder // 设置UserDetailsService .userDetailsService(this.userDetailsService) // 使用BCrypt进行密码的hash .passwordEncoder(passwordEncoder()); } // 装载BCrypt密码编码器 @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } //允许跨域 @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**).allowedOrigins(*) .allowedMethods(GET, HEAD, POST,PUT, DELETE, OPTIONS) .allowCredentials(false).maxAge(3600); } }; } @Override protected void configure(HttpSecurity httpSecurity) throws Exception { httpSecurity // 取消csrf .csrf().disable() // 基于token,所以不需要session .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() .authorizeRequests() .antMatchers(HttpMethod.OPTIONS, /).permitAll() // 允许对于网站静态资源的无授权访问 .antMatchers( HttpMethod.GET, /, /*.html, /favicon.ico, //.html, /**/.css, //*.js, /webjars/, /swagger-resources/, /*/api-docs ).permitAll() // 对于获取token的rest api要允许匿名访问 .antMatchers(/auth/).permitAll() // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated(); // 禁用缓存 httpSecurity.headers().cacheControl(); } } 使用 @PreAuthorize("hasRole('ADMIN')") 注解就可以了 /** 在 @PreAuthorize 中我们可以利用内建的 SPEL 表达式:比如 'hasRole()' 来决定哪些用户有权访问。 需注意的一点是 hasRole 表达式认为每个角色名字前都有一个前缀 'ROLE_'。所以这里的 'ADMIN' 其实在 数据库中存储的是 'ROLE_ADMIN' 。这个 @PreAuthorize 可以修饰Controller也可修饰Controller中的方法。 **/ @RestController @RequestMapping(/users) @PreAuthorize(hasRole('USER')) //有ROLE_USER权限的用户可以访问 public class UserController { @Autowired private UserRepository repository; @PreAuthorize(hasRole('ADMIN'))//有ROLE_ADMIN权限的用户可以访问 @RequestMapping(method = RequestMethod.GET) public List<User> getUsers() { return repository.findAll(); } } Spring Boot中 Spring Security 的入门非常简单,很快我们就能有一个满足大部分需求的权限系统了.而配合 Spring Security 的好搭档就是 JWT 了,两者的集成文章网络上也很多,大家可以自行集成.因为篇幅原因有不少代码省略了,需要的可以参考参考项目代码
2023年01月21日
89 阅读
0 评论
47 点赞
2022-04-11
spring security
(17条消息) spring security_小鱼儿的专栏-CSDN博客
2022年04月11日
75 阅读
0 评论
46 点赞