gpt4 book ai didi

java - Spring @ExceptionHandler 不捕获 AccessDeniedException

转载 作者:搜寻专家 更新时间:2023-10-31 19:29:09 31 4
gpt4 key购买 nike

我用下面的代码设置了一个异常处理程序

@ExceptionHandler(Throwable.class)
public @ResponseBody CustomResponse handleException(Throwable throwable){
// handles exception, returns a JSON
}

我正在使用 Spring Security 3.1。当我尝试在没有身份验证的情况下执行操作时,应用程序抛出 AccessDeniedException。它永远不会出现这种方法。但适用于其他异常(exception)情况。这是它应该工作的方式吗?还是我的代码有问题?

This看起来像一个解决方案。但如果我能在一个点处理异常就更好了。

这是我的配置文件

<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" />
<http auto-config="true" use-expressions="true">
//intercept urls
<form-login login-page="/signin" default-target-url="/" always-use-default-target="true"/>
</http>

<authentication-manager>
<authentication-provider user-service-ref="userDetailsService">
<password-encoder ref="encoder" />
</authentication-provider>
</authentication-manager>

<!-- This encoder doesn't require a salt -->
<beans:bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />

更新

此处用户未通过身份验证 (ROLE_ANONYMOUS)。当我尝试访问 protected 页面时,它会将我重定向到登录 URL。我的问题是,我进行了 AJAX 调用。因此,重定向到返回 ModelAndView 的方法不起作用。这附近有工作吗?

最佳答案

Spring Security 的请求处理全部发生在过滤器链中,在调度程序 servlet 被调用之前,因此它对 Spring MVC 异常处理程序一无所知,实际上可以在没有 Spring MVC 的情况下使用。

您看到的是 expected behaviour对于未经身份验证的用户,但您不希望将 Ajax 调用重定向到 UI 代码。很难准确地说出最好的解决方案是什么,因为对于未经身份验证的 ajax 调用,您希望该行为是什么并不明显。例如,如果您希望它们简单地以 403 失败,那么您可以将 ajax api 分离到一个单独的过滤器链中。例如,如果您对 /ajaxapi 的 ajax 调用可以在现有链定义之前添加以下链定义:

<http pattern="/ajaxapi/**" create-session="never" use-expressions="true" entry-point-ref="entryPoint">
<intercept-url pattern="/**" access="isAuthenticated()" />
</http>

<bean entryPoint="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" />

然后,ajax 调用只会收到 403 响应,直到用户通过浏览器界面进行身份验证。

关于java - Spring @ExceptionHandler 不捕获 AccessDeniedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14424076/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com