SpringSecurity自定义权限

SpringSecurity对权限的校验主要有注解路径校验。本文主要解释基于路径校验。

SpringSecurity对权限的校验主要通过FilterSecurityInterceptor这个过滤链实现的。

FilterSecurityInterceptor实现权限校验主要流程

FilterSecurityInterceptor源码

 FilterSecurityInterceptor主要通过doFilter()中的invoke()方法。

 在调用父类的beforeInvocation()方法。

 

Collection<ConfigAttribute> attributes = this.obtainSecurityMetadataSource().getAttributes(object);

这个过程主要是获取访问当前路径所需要的权限集合attributes ,所以我们可以定义个类,继承FilterInvocationSecurityMetadataSource接口,重写里面的getAttributes()方法,这样就可以实现根据数据库动态获取路径对应的权限信息集合。

 attemptAuthorization(object, attributes, authenticated);

这个方法调用的主要为

 this.accessDecisionManager.decide(authenticated, object, attributes);

这个方法的主要作用是对权限的判断,是否有权限。所有可以实现AccessDecisionManager接口里面的decide()方法,自定义判断该用户是否有权限。

总结:综上所述,我们可以实现FilterInvocationSecurityMetadataSource,AccessDecisionManager这两个接口,在配置到SecurityConfig的配置类型,就可以实现自定义权限。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。它提供了多种身份验证机制和授权机制,其中包括基于角色和权限的授权,以满足不同应用场景的需求。自定义权限Spring Security 中的一项重要功能,允许开发者根据业务需求对权限进行自定义,具体的实现方式如下: 1. 自定义访问控制表达式:Spring Security 提供了许多内置的访问控制表达式,如 hasRole()、hasAuthority() 等。但在某些场景下,这些表达式可能无法满足业务需求,此时可以通过编写自定义的表达式来实现。具体方式是实现接口 `org.springframework.security.access.expression.SecurityExpression`,并覆盖其中的 `getValue` 方法。 2. 自定义 AccessDecisionVoter:AccessDecisionVoter 是 Spring Security 中的一个重要组件,它用于根据当前用户的权限对访问进行投票,从而决定是否允许访问。Spring Security 提供了多种内置的 AccessDecisionVoter 实现,但在某些场景下,开发者可能需要自定义 AccessDecisionVoter 来实现更加细粒度的访问控制。具体方式是实现接口 `org.springframework.security.access.AccessDecisionVoter`。 3. 自定义 AccessDecisionManager:AccessDecisionManager 用于维护 AccessDecisionVoter 的列表,并根据投票结果决定是否允许访问。开发者可以通过实现自己的 AccessDecisionManager 来改变投票的策略。具体方式是实现接口 `org.springframework.security.access.AccessDecisionManager`。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隔山看水

你的鼓励与打赏是我创作的最大动

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值