我希望控制器方法中抛出的异常转换为 500内部服务器错误,但我在客户端获得 405方法不允许异常,没有重要的是控制器方法内部发生了什么异常。
请求映射没有任何问题,因为它在调试时会转到预期的方法。但是当从控制器方法抛出异常时,我得到了#34; 405方法不允许"在我的客户
我尝试捕获异常并使用适当的错误代码和消息抛出HttpServerErrorException
,但没有任何改变!
我使用spring security,这是配置:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled=true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
/*
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
*/
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/session/**").permitAll()
.antMatchers("/app/**").permitAll()
.antMatchers("/lib/**").permitAll()
.antMatchers("/templates/**").permitAll()
.antMatchers("/dial/**").permitAll()
.antMatchers("/names/**").permitAll()
// .antMatchers("/workflows/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/#/login").permitAll();
http.csrf().disable();
http.exceptionHandling().defaultAuthenticationEntryPointFor(
new UnauthorizedLoginUrlAuthenticationEntryPoint("/login.html"),
new ELRequestMatcher("hasHeader('X-Requested-With','XMLHttpRequest')"));
/* .logout()
.permitAll();*/
}
}
答案 0 :(得分:0)
我可以在Spring Data REST控制器的异常处理程序中找到它: -
@ControllerAdvice(basePackageClasses = RepositoryRestExceptionHandler.class)
public class RepositoryRestExceptionHandler {
/**
* Send {@code 405 Method Not Allowed} and include the supported {@link org.springframework.http.HttpMethod}s in the
* {@code Allow} header.
*
* @param o_O the exception to handle.
* @return
*/
@ExceptionHandler
ResponseEntity<Void> handle(HttpRequestMethodNotSupportedException o_O) {
HttpHeaders headers = new HttpHeaders();
headers.setAllow(o_O.getSupportedHttpMethods());
return response(HttpStatus.METHOD_NOT_ALLOWED, headers);
}
}
你可以在你的主春季启动课上试试这个(我希望你的项目类路径以文件夹COM开头): -
@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan({"com"})
答案 1 :(得分:0)
实际上问题是因为存在EmbeddedServletContainerCustomizer
类型的bean
我删除了它并解决了问题。