admin管理员组

文章数量:1356253

I am upgrading an application to use Spring Boot 3.4.0 and Java 17 (previously it was on Spring Boot 2.1.5.RELEASE and Java 8). When deploying this app and trying to consume its web services I am getting a 403 response even when sending the Bearer token. After enabling Spring Security logs I am seeing this message:

o.s.s.w.a.p.x.X509AuthenticationFilter : No client certificate found in request.

This is the Spring Security config I am setting:

@Value("${x509.subject.principal.regex:CN=(.*?)(?:,|$)}")
private String subjectPrincipalRegex;

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http.authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
                .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.NEVER))
                .csrf(AbstractHttpConfigurer::disable)
                .x509(x509 -> x509.subjectPrincipalRegex(subjectPrincipalRegex).userDetailsService(userDetailsService()));
    return http.build();
}

@Bean
public UserDetailsService userDetailsService() {
    return username -> new User(username,
            "", AuthorityUtilsmaSeparatedStringToAuthorityList("ROLE_SSL_USER"));
}

And this is how it is configured on old Spring Boot and Java version which is working:

@Value("${x509.subject.principal.regex:CN=(.*?)(?:,|$)}")
private String subjectPrincipalRegex;

@Override
protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated().and().x509().subjectPrincipalRegex(subjectPrincipalRegex)
                .userDetailsService(userDetailsService());
        http.csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);
}

@Bean
public UserDetailsService userDetailsService() {
    return username -> new User(username,
            "", AuthorityUtilsmaSeparatedStringToAuthorityList("ROLE_SSL_USER"));
}

本文标签: