Механизмы множественного входа в Spring Security 6
До обновления с Spring Security 5.3.24 я мог динамически настраивать несколько решений для входа в HttpSecurity, таких как saml2Login, и два formLogin с разными конфигурациями loginProcessingUrl, например
(httpSecurity
.authorizeRequests()
.antMatchers("/index.html","/static/**").permitAll()
.anyRequest().authenticated()
.and()
.exceptionHandling()
.defaultAuthenticationEntryPointFor(
loginUrlauthenticationEntryPoint(),
new AntPathRequestMatcher("/**"))
.and());
с последующим
.saml2Login(saml2 -> saml2
.relyingPartyRegistrationRepository(relyingPartyRegistrationRepository)
.successHandler(authenticationSuccessHandler));
и
.formLogin(form -> form
.loginPage("/index.html")
.loginProcessingUrl("/app/internal/login" + "/**").permitAll()
.successHandler(authenticationSuccessHandler)
.failureHandler(new AuthenticationFailureHandler() {
И все это сработало, предоставляя URL-адреса для всех методов входа в систему. Обновление Spring Security 6 (6.1.3) больше не работает. Была ли удалена эта функция или существует какой-то другой способ настройки нескольких способов входа в систему с отдельными URL-адресами для их обработки?
1 ответ
Я думаю, что проблемы, с которыми вы столкнулись, - это устаревшие методы, и, чтобы быть уверенным, что это проблема, я рекомендую вам переписатьsecurityFilterChain
что-то вроде этого:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.authorizeHttpRequests(request -> {
request.requestMatchers("/index.html","/static/**").permitAll()
.anyRequest().authenticated();
});
httpSecurity.exceptionHandling(exceptionH -> {
exceptionH.defaultAuthenticationEntryPointFor(
loginUrlauthenticationEntryPoint(),
new AntPathRequestMatcher("/**"));
});
httpSecurity.saml2Login(saml2 -> saml2
.relyingPartyRegistrationRepository(relyingPartyRegistrationRepository)
.successHandler(authenticationSuccessHandler));
httpSecurity.formLogin(form -> form
.loginPage("/index.html")
.loginProcessingUrl("/app/internal/login/**").permitAll()
.successHandler(authenticationSuccessHandler)
.failureHandler(new AuthenticationFailureHandler()));
return httpSecurity.build();
}
Если это также не поможет, вам следует создать два экземпляраsecurityFilter
@Bean
хороший пример того, как это сделать, вы можете найти здесь ответ на этот вопрос , получивший наибольшее количество голосов.
Также вам необходимо проверить Руководство по миграции