我将 spring security 3.1 和 Spring 3.2 用于 REST 服务。我正在努力使每个响应都是 JSON,例如,如果用户尝试访问某些资源但尚未经过身份验证。此外,如果用户提出错误请求,我想返回带有错误消息的 JSON。
只是要提一下,在某个全局位置我应该捕获所有错误/异常会更容易接受。
我将 spring security 3.1 和 Spring 3.2 用于 REST 服务。我正在努力使每个响应都是 JSON,例如,如果用户尝试访问某些资源但尚未经过身份验证。此外,如果用户提出错误请求,我想返回带有错误消息的 JSON。
只是要提一下,在某个全局位置我应该捕获所有错误/异常会更容易接受。
为什么不编写一个由所有其他控制器扩展的控制器类(或者在使用 3.2 的情况下使用 @ControllerAdvice)并在该类中包含一个异常处理程序注释方法?像这样的东西
@ExceptionHandler(Throwable.class)
public @ResponseBody GenericResponse handleException(Throwable throwable){
//handle exception
}
或者阅读这篇博文
更新
很抱歉这个迟到的回复。这是我的建议。让它简单地失败并返回 403 响应。为此,只需在您的 spring 安全配置中添加以下代码段。
<beans:bean id="entryPoint"
class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" />
并将 entrypoint-ref 指向这个 bean
<http auto-config="true" use-expressions="true" entry-point-ref="entryPoint">
在客户端,在您的 AJAX 代码中,添加一个错误块
error : function( jqXHR, textStatus, errorThrown ){
if (jqXHR.status == 403){
alert('you need to login to do this operation');
window.location.href = contextPath+"/signin";
// or whatever you want to
}
}