У меня есть весеннее веб-приложение, которому нужно использовать AJAX для перезагрузки некоторых компонентов в режиме реального времени.Хорошо работал без безопасности, и теперь мне нужно включить безопасность.Я разделил безопасность в соответствии с документацией Spring, предложенной ниже, но у меня происходит нечто странное.При неудачной аутентификации REST контроллер REST возвращает HTML-код страницы входа на стороне WebMVC.Я пытаюсь предотвратить это и отправляю только ошибку 403 в формате JSON, если это возможно.Я явно что-то здесь упускаю.
@Configuration
@Order(2)
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/**")
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/api/**").authenticated()
.and()
.exceptionHandling().accessDeniedPage("/403")
.and()
.httpBasic()
.and()
.csrf().disable();
}
}
@Order(1)
@Configuration
public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/password/passwordreset", "password/passwordresetconfirmation","/password/forgotpassword","password/forgotpasswordemailsent", "/webjars/**").permitAll()
.antMatchers("/admin","/admin/*","/actuator/**").hasAuthority("ADMIN")
.anyRequest()
.authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.successForwardUrl("/index")
.and()
.exceptionHandling().accessDeniedPage("/403")
.and()
.logout()
.permitAll()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login");
}
}