gpt4 book ai didi

java - Spring Boot REST 强制响应类型/401 自定义页面不起作用?

转载 作者:行者123 更新时间:2023-12-01 21:26:50 28 4
gpt4 key购买 nike

我正在使用 Spring Boot 2.2.0.RELEASE 构建我的 REST api。

我已经成功使用 thymeleaf 自定义 500/400/404 错误页面(如果有人使用浏览器导航)并将文件放入:

src/main/resources/templates/error.html
src/main/resources/templates/errors/400.html
src/main/resources/templates/errors/404.html

这一切都运行良好。

但是我注意到,当有人在浏览器中导航到/myrestapi 时,他们会收到 401 错误。默认情况下,在 Spring 中它们会收到 403 错误,但我已覆盖该行为以使其全部为 401:

@Override
protected void configure(HttpSecurity http) throws Exception {
// return HTTP 401 instead of HTTP 403 for unauthorized requests

http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint());
}

private AuthenticationEntryPoint authenticationEntryPoint() {
BasicAuthenticationEntryPoint basicAuthenticationEntryPoint = new BasicAuthenticationEntryPoint();
basicAuthenticationEntryPoint.setRealmName("Bearer realm=\"oauth2-resource\"");
return basicAuthenticationEntryPoint;
}

所以我添加了:

src/main/resources/templates/errors/401.html

这似乎没有被接受,当我进入浏览器时,它显示 XML:

<oauth>
<error_description>
Full authentication is required to access this resource
</error_description>
<error>unauthorized</error>
</oauth>

当我通过 Fiddler 访问该 URL 时,它会为我提供 Json,但我希望人们能够获取我的自定义 401 页面。我找到了一些我需要执行此操作的文档:

WebSecurityConfig.java:

    http.exceptionHandling().accessDeniedPage("/resources/templates/errors/401.html")
.authenticationEntryPoint(authenticationEntryPoint());

我的 ResourceServerConfig.java 看起来像这样:

@Override
public void configure(HttpSecurity http) throws Exception {
// default behavior is to allow anonymous access unless @PreAuthorize is specified

http.exceptionHandling().accessDeniedPage("/resources/templates/errors/401.html").and().authorizeRequests().anyRequest()
.permitAll();

}

但这也行不通。

我错过了什么吗?

注意:我使用 PermitAll() 让所有请求通过,然后使用 @PreAuthorize 在方法级别控制 OAuth 访问。但我也尝试删除permitAll(),但它仍然没有命中。

还尝试了 accessDeniedHandler,但也不起作用。

最佳答案

看来你的路径是错误的。它应该是/resources/templates/errors/401.html

关于java - Spring Boot REST 强制响应类型/401 自定义页面不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58827815/

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