发布于2024-11-10 22:26 阅读(782) 评论(0) 点赞(11) 收藏(5)
我有一个自定义身份验证提供程序,它返回“AbstractAuthenticationToken with
ROLE_ADMIN only. I have a method annotated with
@PreAuthorize("hasRole('ROLE_USER')")”的具体实现。我正在尝试设置角色层次结构以授予我的管理员用户访问此方法的权限。
我的 spring-security.xml 中有以下内容:
<beans:bean id="roleHierarchy" class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
<beans:property name="hierarchy">
<beans:value>
ROLE_ADMIN > ROLE_USER
</beans:value>
</beans:property>
</beans:bean>
<beans:bean id="methodExpressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<beans:property name="roleHierarchy" ref="roleHierarchy" />
</beans:bean>
<sec:global-method-security pre-post-annotations="enabled">
<sec:expression-handler ref="methodExpressionHandler" />
</sec:global-method-security>
对受保护方法的请求被拒绝,尽管如果我将注释更改为,它就可以工作@PreAuthorize("hasRole('ROLE_ADMIN')")
。
我在 上放置了一个断点AccessDeniedException
,这是从 抛出的AffirmativeBased.decide(...)
。问题似乎是 是。PreInvocationAuthorizationAdviceVoter
这说明我的 roleHierarchy 或 methodExpressionHandler 接线有问题。expressionHandler
null
我的 spring-security.xml 有什么明显错误吗?我是否对这些东西的工作原理有什么误解?
哦,我太傻了...我的问题中没有足够的内容来回答这个问题,但我已经解决了。
我<global-method-security>
在我的spring-security.xml
和我的都有dispatcher-servlet.xml
。我只在spring-security内进行更改。
当我在 的构造函数上放置一个断点时,问题就暴露了DefaultMethodSecurityExpressionHandler
。它被调用了两次。一次被调用了setRoleHierarchy
,另一次没有。
解决方案是:
spring-security.xml
和导入dispatcher-servlet.xml
。<global-method-security>
豆子methodExpressionHandler
从spring-security.xml
移到dispatcher-servlet.xml
。作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/693738/14e5af2b8b3a53d745a0/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!