JSF 2 + Spring Security 3.1.x @Secured AccessDeniedException 处理
Posted
技术标签:
【中文标题】JSF 2 + Spring Security 3.1.x @Secured AccessDeniedException 处理【英文标题】:JSF 2 + Spring Security 3.1.x @Secured AccessDeniedException handling 【发布时间】:2012-11-08 13:54:53 【问题描述】:我想问一下如何处理(例如捕获、记录和重定向流)来自“安全注释”(@PreAuthorize、@Secured 等)的 AccessDeniedException?
我尝试设置自己的 AccessDeniedHandler:
<http auto-config="true" use-expressions="true">
...
<access-denied-handler ref="myAccessDeniedHandler" />
</http>
但它似乎只拦截当我尝试访问未经授权的资源时引发的异常。
但是来自
的异常@PreAuthorize("hasRole('ROLE_ADMIN')")
public void myMethod()
System.out.println("Secret Method");
不是这样处理的。
【问题讨论】:
您确定您正确配置了方法保护吗?我的意思是<global-method-security pre-post-annotation-handling="enabled"/>
?你确定会抛出 AccessDeniedException 吗?
是的,我配置了它 这篇文章有点老了,所以我想你不再需要答案了。仍在为其他人回答这个问题:
首先:您是对的:<access-denied-handler ref="myAccessDeniedHandler" />
仅处理资源请求,因此您需要不同的方法来处理您自己的代码或 Spring-Security 抛出的 AccessDeniedExceptions,因为 @PreAuthorize
。
您可以做的是使用 Spring-AOP/AspectJ 编写一个带有切入点的环绕方面,该切入点引用所有使用特定注释注释的方法(在您的情况下为 @PreAuthorize)
有关处理@Secured
-annotations 的示例,请参阅JSF2 with SpringSecurity: handle AccessDeniedException of @Secured-Annotation
【讨论】:
以上是关于JSF 2 + Spring Security 3.1.x @Secured AccessDeniedException 处理的主要内容,如果未能解决你的问题,请参考以下文章
我们可以集成 JSF 2.0 + Spring 4.2.X + Spring Security 4.2.X [重复]
Spring Security + JSF 2.0 + Primefaces + Hibernate 配置
如何使用 Spring Security 3.1.3 和 JSF 创建一个 Bean 来验证我的登录表单