您的位置:首页 > 编程语言 > Java开发

Spring boot 与Spring security集成的自定义认证

2020-03-29 12:49 363 查看

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

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Nopromisess 发布了1 篇原创文章 · 获赞 0 · 访问量 24 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: