【SpringSecurity实现登录校验与授权】


前言:该文章主要是通过学习尚硅谷的课程以及课堂笔记,根据自己的理解总结出来的,旨在加深自己对该部分技术的理解,部分地方可能分析的不对,请谅解。

一、SpringSecurity的两个重要过滤器

SpringSecurity实现认证和授权实际上是通过一系列的过滤器来进行拦截的,其中用到的最重要两个过滤器就是
UsernamePasswordAuthenticationFilter:负责登录认证
FilterSecurityInterceptor:负责权限授权

二、SpringSecurity的三个重要组件

1、Authentication:存储了认证信息,代表当前登录用户
​2、SeucirtyContext:上下文对象,用来获取Authentication
​3、SecurityContextHolder:上下文管理对象,用来在程序任何地方获取SecurityContext

个人理解就类似于下图
在这里插入图片描述
Authentication存储着主要的信息:
​ 1、Principal:用户信息,没有认证时一般是用户名,认证后一般是用户对象
​ 2、Credentials:用户凭证,一般是密码
​ 3、Authorities:用户权限

三、登录校验

在登录校验时,首先将用户名密码传入。封装到UsernamePasswordAuthenticationToken之中,然后使用**AuthenticationManager** 的authenticate方法完成认证。该方法的大致逻辑是通过用户名查询出用户,检验用户是否存在以及密码是否正确等操作,如果不符合则抛出异常,通过的话则将用户信息放入UsernamePasswordAuthenticationToken之中,当作Principal,此时的UsernamePasswordAuthenticationToken就相当于是Authentication。

需要配置三个工具:(SpringSecurity都有默认的实现方式,但可能并不满足我们的需求,需要进行改造)
1、密码校验:通常是使用自己特定的加密方式,所以我们要修改密码校验部分的加密方式:implements PasswordEncoder

2、用户信息也需要稍作修改:extends User,这个User是import org.springframework.security.core.userdetails.User

3、然后就是根据用户名获取用户对象的方法,这里需要从我们指定的地方获取用户:implements UserDetailsService

4、重写用户认证接口:extends UsernamePasswordAuthenticationFilter 包括登录认证、登录成功、登录失败的方法

5、重写认证解析token:extends OncePerRequestFilter、这里实现登录接口放行,以及token校验

6、配置用户认证:这里配置不需要验证的接口,即登入接口。并设置认证解析token的过滤器在用户认证的过滤器之前。同时指定加密器以及用户获取的方法,最后设置不拦截的请求,(静态资源、接口文档页面等)

四、用户授权

1、将用户的权限放入到Authentication中,在loadUserByUsername中修改逻辑,查询到权限相关的字符时,将其放入。

2、保存在redis中(登录方法中修改)即修改TokenLoginFilter登录成功方法,用户名为key,权限信息为value
修改TokenAuthenticationFilter验证,从redis中根据用户名获取权限信息


总结:只是简单地了解一下SpringSecurity整合到SpringBoot项目中,更深层次地理解还得在实际工作中多使用,多研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值