Spring Boot过滤器用于不存在的端点

时间:2017-04-15 15:06:21

标签: java spring tomcat spring-boot spring-security

我正在使用Spring Boot开发REST API,目前我遇到处理对不存在的端点的请求的问题。

处理这种情况的一种首选方法是使用JSON中的消息返回一个指定的HTTP状态代码,该消息是关于不支持的方法,目前Spring一直使用HTTP 200返回空白响应。如何用Spring完成? Somekind of filter?

修改:

当然,我不会调用现有的端点,例如我可以打电话给端点:

localhost:8080/endpoint/bla/void/test 

它和我提到的结果相同。这个案例可能是我的Spring Security配置,我已经实现了WebSecurityConfigurerAdapter,其configure方法具有以下属性:

httpSecurity
    .csrf().disable()
    .authorizeRequests()
        .and()
    .formLogin()
        .loginPage("/login")
        .successHandler((httpServletRequest, httpServletResponse, authentication) -> httpServletResponse.setStatus(HttpServletResponse.SC_OK))
        .failureHandler((httpServletRequest, httpServletResponse, e) -> httpServletResponse.setStatus(HttpServletResponse.SC_NOT_FOUND))
        .usernameParameter("email")
        .passwordParameter("password")
        .permitAll()
        .and()
    .logout()
        .logoutUrl("/logout")
        .logoutSuccessUrl("/index")
        .logoutSuccessHandler((httpServletRequest, httpServletResponse, authentication) -> httpServletResponse.setStatus(HttpServletResponse.SC_OK))
        .deleteCookies("JSESSIONID")
        .invalidateHttpSession(true)
        .permitAll();

关于容器,我使用的是Tomcat,我没有定义任何404错误页面。

编辑:(我的评论翻了一倍)

现在我注意到如果项目在嵌入式Tomcat中运行,那么不存在的方法处理功能就可以了。但是,如果我将项目部署到外部Tomcat容器,它将继续返回HTTP 200.有人可以向我解释这种行为吗?

0 个答案:

没有答案