Spring安全性 – 为什么RoleVoter支持所有类,而WebExpressionVot
在RoleVoter的支持(Class clazz)方法中,它总是返回true表示
什么是“呈现的安全对象”.另一方面,仅当clazz是FilterInvocation的子类型时,WebExpressionVoter的supports(Class clazz)方法才返回true. FilterInvocation是“提供的安全对象”,为什么选民必须支持它? 如果我对我的方法使用@Secured注释并为具有WebExpressionVoter作为选民之一的全局方法安全性配置访问决策管理器,则会出现错误
这是因为访问决策管理器的所有选民(当配置为方法安全性时)必须支持上述类,而RoleVoter和其他人一样,WebExpressionVoter需要FilterInvocation的子类型. @PreAuthorize标记中的SPEL表达式也需要WebExpressionVoter,并且需要再次支持MethodInvocation类,而不需要它.但它确实有效.那我在这里错了什么? 最佳答案
受保护对象是表示受保护的任何内容的摘要.对于@ Secure,@ RolesAllowed,@ PreFilter和@PreAuthorize,它可以是MethodInvocation,如果是< intercept-url />,则可以是FilterInvocation.或者任何其他物品(如果需要)
@PreFilter和@PreAuthorize注释由PreInvocationAuthorizationAdviceVoter处理.它使用MethodInvocation来获取注释及其属性值,因此它具有:
WebExpressionVoter是特定于Web调用的,因为它匹配来自< intercept-url />的模式的URL,这就是它具有的原因:
RoleVoter仅使用Authentication对象内容,因此它不依赖于安全对象,这就是它具有以下内容的原因:
请注意,您可以使用单独的AccessDecisionManager来实现URL级别安全性和方法级别安全性.第一个将使用支持FilterInvocation的选民,另一个支持MethodInvocation.另请注意,RoleVoter支持两者,因此可以在两种上下文中使用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |