spring security中的AbstractSecurityInterceptor

本文详细介绍了Spring Security中的AbstractSecurityInterceptor,包括AccessDecisionManager的三种默认实现及其工作原理,以及FilterSecurityInterceptor和MethodSecurityInterceptor的详细功能。强调了自定义FilterSecurityInterceptor的限制,并探讨了MethodSecurityInterceptor的SecurityMetadataSource和AccessDecisionManager的定制方法。
摘要由CSDN通过智能技术生成


前言

简单复习一下看的 AbstractSecurityInterceptor的内容


一、AccessDecisionManager

AccessDecisionManager是实际处理请求的接口,spring security三种不同的实现,也可以自定义实现。如果拒绝会抛出AccessDeniedException异常,通过则正常返回

默认实现

默认的三种实现都是将请求委托给AccessDecisionVoter的集合去处理,区别在于根据针对AccessDecisionVoter处理结果的处理策略

AccessDecisionVoter 中的vote方法会返回一个int值,通常是在AccessDecisionVoter所定义的值

	int ACCESS_GRANTED = 1;
	int ACCESS_ABSTAIN = 0;
	int ACCESS_DENIED = -1;

三种实现:

  1. AffirmativeBased:这是AbstractSecurityInterceptor中的默认实现方式,它会将针对安全对象进行操作所需的所有权限分别委托给Voter处理,只要有一个Voter返回结果为ACCESS_GRANTED就会通过
  2. ConsensusBased: 同样将针对安全对象进行操作所需的所有权限分别委托给Voter处理,但会判断并比较返回ACCESS_GRANTEDACCESS_DENIED的数量,ACCESS_GRANTED较多则通关,两者相同默认拒绝,但可以手动设置.
  3. UnanimousBased: 它会将所需的每一个权限分别委托给Voter去处理,当任意一个Voter针对任意一个权限返回ACCESS_DENIED都会拒绝访问

如果所有Voter都返回ACCESS_ABSTAIN ,默认会拒绝不过可以手动配置

接口中方法

 void decide(Authentication authentication, Object object,
			Collection<ConfigAttribute> configAttributes) throws AccessDeniedException,
			InsufficientAuthenticationException;

参数:
authentication: 在认证过程中封装的对象,可以从中取出封装的user对象
object:保护的安全对象,实际类型根据AbstractSecurityInterceptor实现的不同而不同,通常为 FilterInvocationMethodInvocation
configAttributes: 针对该安全对象操作所需的权限,通常是通过SecurityMetadataSource的实体类获取

异常:
抛出这两种异常分别用于表示认证不足和权限不足,意义它们在于分别是由ExceptionTranslationFilter中的AccessDeniedHandlerAuthenticationEntryPoint来处理,需要注意的是匿名用户和通过remeberme认证的用户即使是AccessDeniedException也是由AuthenticationEntryPoint来处理

boolean supports(ConfigAttribute attribute);
boolean supports(Class<?> clazz);

AbstractAccessDecisionManager有默认实现,默认要求每一个ConfigAttribute都有Voter支持处理,所有Voter都要支持clazzclazz就是安全对象的class)

二、FilterSecurityInterceptor

这是是srping security过滤器链中AbstractSecurityInterceptor的默认实现,所保护的安全对象的类型为FilterInvocation,同时这还是一个过滤器。

默认的AccessDecisionVoter集合

默认提供的AccessDecisionVoter的集合如下

List<AccessDecisionVoter<
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值