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");

不是这样处理的。

【问题讨论】:

您确定您正确配置了方法保护吗?我的意思是&lt;global-method-security pre-post-annotation-handling="enabled"/&gt;?你确定会抛出 AccessDeniedException 吗? 是的,我配置了它 是的,“AccessDeniedException:访问被拒绝”抛出 展示你的整个spring安全配置 【参考方案1】:

这篇文章有点老了,所以我想你不再需要答案了。仍在为其他人回答这个问题:

首先:您是对的:&lt;access-denied-handler ref="myAccessDeniedHandler" /&gt; 仅处理资源请求,因此您需要不同的方法来处理您自己的代码或 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 处理的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 4 和 JSF 2 集成

我们可以集成 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 来验证我的登录表单

如何在 JSF 中使用 Spring Security Facelets 标签库

j_spring_security_check 404 JSF 登录错误