Spring security知识点整理

本文解析了Spring Security的工作流程,重点介绍了Filter接口的关键作用及其doFilter方法如何贯穿整个认证授权过程。AbstractSecurityInterceptor作为核心类,实现了权限验证、清理工作及结果处理等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1) Filter(javax.servlet.Filter) 接口是整个流程关键的接口. 其中doFilter为关键动作, 用来过滤动作.
2) fi.getChain().doFilter(fi.getRequest(), fi.getResponse());调用沿袭链条
3) AbstractSecurityInterceptor的beforeInvocation在验证这里已经处理验证的比对逻辑, 之后的invocation只是调用了authenticate, 没有验证比对
4) beforeInvocation里含有this.accessDecisionManager.decide(authenticated, object, attributes);逻辑, 这里的AccessDecisionManager可以自定义来实现判断比对逻辑.
5) doFilter逻辑最终调用到rest api 逻辑.
6) AbstractSecurityInterceptor:
AbstractSecurityInterceptor是一个实现了对受保护对象的访问进行拦截的抽象类,其中有几个比较重要的方法。beforeInvocation()方法实现了对访问受保护对象的权限校验,内部
用到了AccessDecisionManager和AuthenticationManager;finallyInvocation()方法用于实现受保护对象请求完毕后的一些清理工作,主要是如果在beforeInvocation()中改
变了SecurityContext,则在finallyInvocation()中需要将其恢复为原来的SecurityContext,该方法的调用应当包含在子类请求受保护资源时的finally语句块中;
afterInvocation()方法实现了对返回结果的处理,在注入了AfterInvocationManager的情况下默认会调用其decide()方法。AbstractSecurityInterceptor只是提供了这几种方法,
并且包含了默认实现,具体怎么调用将由子类负责。每一种受保护对象都拥有继承自AbstractSecurityInterceptor的拦截器类, MethodSecurityInterceptor将用于调用受保护的方法,
而FilterSecurityInterceptor将用于受保护的Web请求。它们在处理受保护对象的请求时都具有一致的逻辑,具体的逻辑如下。
1、先将正在请求调用的受保护对象传递给beforeInvocation()方法进行权限鉴定。
2、权限鉴定失败就直接抛出异常了。
3、鉴定成功将尝试调用受保护对象,调用完成后,不管是成功调用,还是抛出异常,都将执行finallyInvocation()。
4、如果在调用受保护对象后没有抛出异常,则调用afterInvocation()。


7) FilerSecurityInterceptor 继承于AbstractSecurityInterceptor, 且implement Filter接口. AbstractSecurityInterceptor是个虚类, 主要提供beforeInvocation,
finallyInvocation, afterInvocation等几个方法.
8) 整个security的流程就是Filter接口的doFilter. 自定义的doFilter会在父类一层层的走完后调用到(如DemoSecurityInterceptor)
9) 整个security的流程就是Filter接口的doFilter. 这个过程中AbstractSecurityInterceptor作为过滤过程中的父类, 开始和结束都是在这. 然后从AbstractSecurityInterceptor开始,
  doFilter经过filter chain的几个类(包括FilterSecurityInterceptor类),到达自定义的SecurityInterceptor类. doFilter过程中含有3个动作: 1)调用父类的beforeInvocation
  验证; 2) 调用doFilter(位于doFilter的invoke方法里的fi.getChain().doFilter(fi.getRequest(), fi.getResponse());)来到达controller层; 3) 最后afterInvocation
  来清理环境等.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值