2

我想问一下如何处理(例如捕获、记录和重定向流)来自“安全注释”(@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");
}

不是这样处理的。

4

1 回答 1

0

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

首先:你是对的:<access-denied-handler ref="myAccessDeniedHandler" />只处理对资源的请求,所以你需要一些不同的东西来处理你自己的代码或 Spring-Security 抛出的 AccessDeniedExceptions,因为@PreAuthorize.

您可以做的是使用 Spring-AOP/AspectJ 编写一个带有切入点的环绕方面,该切入点引用所有使用特定注释注释的方法(在您的情况下为 @PreAuthorize)

有关处理-annotations的示例,请参见JSF2 with SpringSecurity: handle AccessDeniedException of @Secured-Annotation@Secured

于 2013-10-25T08:33:34.397 回答