当前位置: 首页 > 知识库问答 >
问题:

Spring BootRest部队响应类型/ 401自定义页面不起作用?

裘兴思
2023-03-14

我正在使用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()让所有请求通过,然后使用@PreAuthorze在方法级别控制OAuth访问。但我也尝试删除permitAll(),但它仍然没有命中。

还尝试了访问DeniedHandler,但也不起作用。

共有1个答案

仲俊豪
2023-03-14

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

 类似资料:
  • 这应该很简单。我修改了项目的web.xml,以便显示我自己的500错误页面: 然后我写了最简单的servlet来测试它: 然后完全忽略自定义页面(位于根目录),而是获得默认的 Tomcat 错误页面。 我使用的是MyEclipse调试器附带的Tomcat 6版本。我已经三重检查了拼写错误,但我找不到任何异常。我想知道错误页面标签是否需要在文档的某个部分。有谁知道可能出了什么问题? *编辑:这是请求

  • 问题内容: 我已经创建了一个UserType(请参见下文)来处理mySQL数据库中的一种情况,在该情况下我们将空日期保存为0000-00-00 00:00:00。 当我尝试使用dispDT的null持久化我的实体时(请参见下文),它将生成以下异常:“ javax.persistence.PersistenceException:org.hibernate.PropertyValueExceptio

  • 您好,我在Django中有一个项目,它对不同的数据库执行多个查询,并在多个endpoint中返回它们,为此我使用Pandas和DRF(APIViews)。 当响应很长,逻辑上服务器运行内存溢出时,问题就出现了,我知道我需要分页结果,但我没有找到方法,因为我不使用模型或序列化器,我用熊猫做原始查询进行查询。 有没有办法像我这样分页结果? 我留下了一些代码片段。

  • 我创建了一个归档页面,我的'事件'自定义帖子猿archive-event.php.我使用的内容从标准archive.php模板,它列出了我的4个事件的顺序,他们被张贴。 下一步是按自定义字段event_date更改订单。我这样做没有问题。然后我不想显示任何事件的日期已经过去。下面的代码完美地实现了这一点。 我现在的问题是我的分页都搞砸了。我的默认阅读设置为每页2篇文章,我有一个“加载更多”按钮来显

  • 我是个新手,我正在努力发展我的第一个主题。 不幸的是,我遇到了一些麻烦与自定义后类型(项目)。我已经尝试了关于这个主题的不同组合(query_post、WP_Query、同花永久链接等)。),但似乎没有一个适合我。 我尝试使用插件wp_pagenavi。 这是我的注册帖子类型,在函数中。php: 以下是模板中列出我的自定义帖子类型“projet”的代码: 目前,这段代码列出了2最后一个自定义帖子类

  • 这是一个概念问题。 我这样问的原因是,有些其他RESTful服务使用401处理错误的凭据,即使您只是询问凭据是否有效。然而,我对401响应的理解是,它们代表了一个没有有效凭据的资源。但登录资源应该对任何人都可以访问,因为登录资源的全部目的是告诉您凭据是否有效。 换句话说,在我看来,像这样的请求: 如果提供了错误的凭据,则应返回401。而是这样的请求: 关于这件事,我想听听一些合理的意见。处理这件事