Я использую spring-security-saml2-service-provider
для аутентификации в одном из моих приложений весенней загрузки, и я использую пользовательский JwtAuthorizationFilter
(через заголовок http Authentication) в другом приложении весенней загрузки.
Они оба прекрасно работают самостоятельно.
Теперь мне нужно написать приложение с загрузочной пружиной, которое использует оба из них. Если токен JWT доступен (заголовок аутентификации), используйте JwtAuthorizationFilter
, в противном случае используйте saml2Login
.
. Конфигурация SAML2 выглядит следующим образом: (существует нет фильтр , просто saml2Login
)
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and()
.antMatcher("/**").authorizeRequests()
.antMatchers("/saml2/service-provider-metadata/**").permitAll()
.antMatchers("/**").authenticated().and()
// use SAML2
.saml2Login()
.addObjectPostProcessor(new ObjectPostProcessor<OpenSamlAuthenticationProvider>() {
public <O extends OpenSamlAuthenticationProvider> O postProcess(O samlAuthProvider) {
samlAuthProvider.setAuthoritiesExtractor(authoritiesExtractor());
samlAuthProvider.setAuthoritiesMapper(authoritiesMapper());
return samlAuthProvider;
}
})
;
}
Конфигурация JWT выглядит следующим образом:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and()
.antMatcher("/**").authorizeRequests()
.antMatchers("/**").authenticated().and()
// use JWT
.addFilter(new JwtAuthorizationFilter(authenticationManager(), jwtUtil))
;
}
Я думаю, мне нужно что-то вроде JwtOrSaml2AuthenticationFilter
но не знаю как это сделать.