加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Spring安全性 – 为什么RoleVoter支持所有类,而WebExpressionVot

发布时间:2020-12-15 01:32:36 所属栏目:大数据 来源:网络整理
导读:在RoleVoter的支持(Class clazz)方法中,它总是返回true表示 This implementation supports any type of class,because it does not query the presented secure object. 什么是“呈现的安全对象”.另一方面,仅当clazz是FilterInvocation的子类型时,WebExpres

在RoleVoter的支持(Class clazz)方法中,它总是返回true表示

This implementation supports any type of class,because it does not
query the presented secure object.

什么是“呈现的安全对象”.另一方面,仅当clazz是FilterInvocation的子类型时,WebExpressionVoter的supports(Class clazz)方法才返回true. FilterInvocation是“提供的安全对象”,为什么选民必须支持它?

如果我对我的方法使用@Secured注释并为具有WebExpressionVoter作为选民之一的全局方法安全性配置访问决策管理器,则会出现错误

AccessDecisionManager does not support secure object class: interface
org.aopalliance.intercept.MethodInvocation

这是因为访问决策管理器的所有选民(当配置为方法安全性时)必须支持上述类,而RoleVoter和其他人一样,WebExpressionVoter需要FilterInvocation的子类型.

@PreAuthorize标记中的SPEL表达式也需要WebExpressionVoter,并且需要再次支持MethodInvocation类,而不需要它.但它确实有效.那我在这里错了什么?

最佳答案
受保护对象是表示受保护的任何内容的摘要.对于@ Secure,@ RolesAllowed,@ PreFilter和@PreAuthorize,它可以是MethodInvocation,如果是< intercept-url />,则可以是FilterInvocation.或者任何其他物品(如果需要)

@PreFilter和@PreAuthorize注释由PreInvocationAuthorizationAdviceVoter处理.它使用MethodInvocation来获取注释及其属性值,因此它具有:

public boolean supports(Class

WebExpressionVoter是特定于Web调用的,因为它匹配来自< intercept-url />的模式的URL,这就是它具有的原因:

public boolean supports(Class

RoleVoter仅使用Authentication对象内容,因此它不依赖于安全对象,这就是它具有以下内容的原因:

public boolean supports(Class

请注意,您可以使用单独的AccessDecisionManager来实现URL级别安全性和方法级别安全性.第一个将使用支持FilterInvocation的选民,另一个支持MethodInvocation.另请注意,RoleVoter支持两者,因此可以在两种上下文中使用它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读