对spring security的理解

对spring security的理解

要想搞清楚springsecurity 最好的切入点 是搞清楚 security的认证流程。这才是这个知识的主干。

主要原理

spring security 是基于servlet的filter。

核心类

框架的魅力就在于,它即是方便也是限制。

所以为了能用上它的方便,我们就得接受它的限制。

要想搞清楚认知流程 又得先说说几个核心类。

首先我们得实现一个继承了UserDetail的类,表示用户的一些基本信息,用户名,密码,角色等信息。然后实现一个UserDetailService的接口,主要就是里面的finduserbyname方法,就是能通过用户名找到用户。再就是我们通常要实现WebSecurityConfigurerAdapter 来做一些配置,如加入过滤器,设置一些不需要进行验证的请求 如登录,取消csrf(如果用的是token,就不存在coocie)。还有几个核心类在下面的认证流程中一起介绍

认证历程

那么我们接着说 spring security 凭什么说我们通过了验证。

那就是 SecurityContent里面有通过验证的Authentication对象

为了做到这点 又引出了另外两个核心类 SecurityContentHolder和AuthenticationManager,前者是一个工具类,我们可以通过它拿到SecurityContent,后者是一个管理器,它的作用是传入一个未认证的Authentication对它进行校验 校验通过就返回一个通过了校验的Authentication,没有就会抛出异常。假如校验通过,我们把它放到SecurityContent中,这样整个认真过程就完成了。

认证与过滤器

上面的动作在哪里完成呢?就在我们的过滤器中,或者是登录过程。

最后的重头戏就是配置过滤器,假如我们是基于token,那么我们可以在一个filter里面校验 token 校验通过后,申明一个Authentication放到SecurityContent中,最后记得继续执行过滤链。

或者是在请求登录的时候完成我们上面的认证历程。

完善

为了完善整个过程 通常我们还会自定义认证失败的回调事件等。

题外话

既然提到了servlet 那么servlet与interceptor的区别是什么?

这里只讨论时机。在servlet容器中,

httprequest–filter chain --> servlet–>interceptor --> controller - interceptor -->filter chain–>httpresponse

假如是spring mvc框架 那么它只有一个dispatchservlet 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值