Spring boot 与Spring security集成的自定义认证
SpringBoot集成Spring Security分析
1.首先,导入依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
注意:一旦导入spring security的依赖,整个工程即受spring security的保护,访问工程任意接口和页面时,需要进行认证,此时的认证是spring security自带的认证,用户名为:user,密码为:控制台打印的字符串。
只有通过spring security的认证后,原始访问需求才会被继续
Spring security的工作流程:
图中,绿色的认证方式可以配置,蓝色和橙色位置的认证处理不可修改
在spring security的自带认证方式中,有两种认证方式:
httpbasic
formLogin
同样,提供两种过滤器:
UsernamePawwordAuthenticationFilter 表示formLogin方式登录过滤器
BasicAuthenticationFilter 表示httpbaic方式登录过滤器
配置Spring security
2.覆盖spring security的原认证配置:
创建一个继承于WebSecurityConfigurerAdapter,然后覆写其中的configure(HttpSecurity http) throws Exception
如图:
自定义用户认证逻辑主要流程:
3.处理用户信息获取逻辑:
以上的配置完成后,采用的仍然只是spring security的默认用户登录,需要将其改为自定义的用户认证,因此需要户自定义UserDetailsService,将用和信息权限注入进来:
实现UserDetailService,且需要重写loadUserByUsername方法,参数是用户输入的用户名,如图:
将其用户查找改为工程自身的查找用户逻辑,需要注意的是返回的是UserDetails类,需要自定类实现UserDetails。同时UserDetailsServiceImpl这个类的接口实现类的作用可知为,接受前台输入的用户名,到数据库中查找对应的用户信息,然后将查询到的用户信息封装在UserDetail实现类中,传递UserDetail的实现类,让其去做用户信息校验,如果校验通过则将用户信息保存在session中(如果开启session信息保存的话),否则,验证失败抛出UsernameNotFoundException异常。
下面进入用户校验逻辑处理
用户校验逻辑主要包含两个方面:
密码是否匹配
密码是否过期,账号是否锁定之类的
登陆凭证校验:
密码是否匹配由UsernamePasswordAuthenticationFilter类实现,用户需要修改密码校验逻辑,可继承UsernamePasswordAuthenticationFilter类,然后在WebSecurityConfig中进行配置,通过addFilter()进行添加
登陆规则校验:
密码是否过期,账号是否锁定等校验在自定义的UserDetails实现类中进行实现:
至此用户名登陆校验的自定义过程就算完成
凭证加密:
如果需要将前台传入的密码进行加密,可在WebSecurityConfig中进行配置,覆写configure(AuthenticationManagerBuilder auth)中进行配置,此配置在spring启动时,即自动加载,在UsernamePasswordAuthenticationFilter类生成Authentication后,进行自动校验的,进行与当前密码匹配校验
总结:
所以spring security的认证流程为:
UsernamePasswordAuthenticationFilter(get username,password)-》AuthenticationManager.authenticate-》UserDetails(query by username, Match password with passwordEncoderPolicy)-》Authentication-》BasicAuthenticationFilter
- 点赞
- 收藏
- 分享
- 文章举报
- Spring Boot 2.X(十八):集成 Spring Security-登录认证和权限控制
- Spring Boot 2.X(十八):集成 Spring Security-登录认证和权限控制
- Spring Boot 2.X(十八):集成 Spring Security-登录认证和权限控制
- Spring Boot 集成 Spring Security 使用自定义的安全数据源
- Spring Boot集成Spring Security+OAuth2配置认证和权限控制
- SpringBoot__JWT无状态服务和Spring Security登入认证
- spring boot 集成 shiro 自定义密码验证 自定义freemarker标签根据权限渲染不同页面(推荐
- Angular集成Spring Boot,Spring Security,JWT和CORS
- springboot+jwt+shiro集成实现前后端分离的登录认证和拦截
- spring boot 集成spring security
- Spring security(四)-spring boot +spring security短信认证+redis整合
- springboot+cas5.x+shiro+pac4j实现sso集成自定义数据库认证(二)
- 详解Spring Boot 使用Spring security 集成CAS
- Spring Security于Spring Boot结合的认证授权机制流程(一)
- Spring Security 与Spring Boot结合的认证授权机制流程(二)
- 十二、SpringBoot 优雅的集成Spring Security
- 在Spring Boot中整合Spring Security并自定义验证代码
- Springboot集成自定义的Druid连接池,前端自定义JDBC连接实现
- spring boot 整合 spring security 登录认证
- springboot 集成 spring security 详细 附代码