gpt4 book ai didi

java - 如何为我的 Spring MVC/Security restful web 服务创建自定义 JSON 401 页面?

转载 作者:行者123 更新时间:2023-11-30 07:24:35 24 4
gpt4 key购买 nike

我正在尝试使用 Servlet 3.0、Spring MVC 和 Spring Security 创建安全的 RESTful Web 服务。我想在 401 上返回自定义 JSON 消息,而不是 Servlet 容器返回的默认 HTML 消息。

我尝试了几种方法,但似乎无法正常工作。

我的 Controller 如下所示:

@Controller
@RequestMapping("/")
public class ApplicationController {

private ApplicationFactory applicationFactory;

@Inject
public ApplicationController(ApplicationFactory applicationFactory) {
super();
this.applicationFactory = applicationFactory;
}

@RequestMapping(method = GET)
@ResponseBody
@Secured("ROLE_USER")
public Application getApplicationInfo() {
return applicationFactory.buildApplication(this);
}

}

我的 Spring Security 上下文如下所示:

<security:global-method-security secured-annotations="enabled" mode="aspectj" />

<security:http auto-config="true" use-expressions="true">
<security:http-basic />
</security:http>

我试过添加以下内容:

@ExceptionHandler(AccessDeniedException.class)
@ResponseBody
public Application accessDenied() {
return applicationFactory.buildApplication(this);
}

但它被忽略了。我尝试将“access-denied-page="/denied""添加到我的 security:http 标签中,在我的 Controller 中使用以下内容:

@RequestMapping(value = "/denied", method = GET)
@ResponseBody
public Application accessDenied() {
return applicationFactory.buildApplication(this);
}

但它被忽略了。我尝试了一个自定义访问被拒绝的处理程序,如下所示:

<security:http auto-config="true" use-expressions="true">
<security:http-basic />
<security:access-denied-handler ref="jsonAccessDeniedHandler" />
</security:http>

唯一似乎有效的是以下内容:

@ExceptionHandler(Exception.class)
@ResponseBody
public Application accessDenied() {
return applicationFactory.buildApplication(this);
}

但这会捕获所有内容,我只想自定义失败的身份验证。

最后,将它添加到我的 web.xml 中也可以:

<error-page>
<error-code>401</error-code>
<location>/401</location>
</error-page>

但我更愿意以编程方式或通过注释进行尽可能多的配置。

最佳答案

在spring 3.0中有一个注解ResponseStatus

我是这样使用这个注解的;

@ResponseStatus(value = 401)
@ExceptionHandler(value = HttpMessageNotReadableException.class)
@ResponseBody
public ErrorResponse handleJsonMappingException(HttpMessageNotReadableException e) {

这有用吗?

关于java - 如何为我的 Spring MVC/Security restful web 服务创建自定义 JSON 401 页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11448409/

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