Надеюсь, это несколько полезно.

тоящее время, когда пользователь не проходит аутентификацию, Spring Security отвечает:

{"error": "invalid_grant","error_description": "Bad credentials"}

И я хотел бы улучшить этот ответ с помощью кода ответа, такого как:

{"responsecode": "XYZ","error": "invalid_grant","error_description": "Bad credentials"}

После некоторого возни, похоже, что мне нужно сделать, это реализовать AuthenticationFailureHandler, что я начал делать. Тем не менее, метод onAuthenticationFailure, кажется, никогда не достигается, когда я отправляю неверные учетные данные для входа. Я прошел через код и поместил регистрацию в методе onAuthenticationFailure, чтобы подтвердить, что он не достигнут.

Мой обработчик ошибок:

@Component
public class SSOAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler{

    @Override
    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
        AuthenticationException exception) throws IOException, ServletException {
        super.onAuthenticationFailure(request, response, exception);
        response.addHeader("responsecode", "XYZ");  
    }
}

И мой WebSecurityConfigurerAdapter содержит:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired SSOAuthenticationFailureHandler authenticationFailureHandler;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.formLogin().failureHandler(authenticationFailureHandler);
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(service).passwordEncoder(passwordEncoder());
        auth.authenticationEventPublisher(defaultAuthenticationEventPublisher());
    }

    @Bean
    public DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher(){
        return new DefaultAuthenticationEventPublisher();
    }

    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Bean
    public SSOAuthenticationFailureHandler authenticationHandlerBean() {
        return new SSOAuthenticationFailureHandler();
    }

    @Bean
    public PasswordEncoder passwordEncoder(){
        PasswordEncoder encoder = new BCryptPasswordEncoder();
        return encoder;
    }
}

Мои вопросы:

Это правильный путь для достижения желаемого результата? (Настройка ответа аутентификации Spring Spring)Если да, то сделал ли я что-то не так, пытаясь настроить обработчик ошибок аутентификации (поскольку неправильный вход в систему, похоже, не достигает метода onAuthenticationFailure?

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос