programing

여러 패턴에 대한 스프링 부트에서의 여러 Web Security Configurer Adapter

testmans 2023. 3. 16. 21:13
반응형

여러 패턴에 대한 스프링 부트에서의 여러 Web Security Configurer Adapter

프로젝트용으로 여러 WebsecurityConfigrAdapter를 설정하려고 합니다.여기에는 스프링 부트액튜에이터 API가 기본 인증으로 보호되며 다른 모든 엔드포인트가 JWtAuthentication으로 인증됩니다.함께 동작할 수 없는 것은 하위 설정뿐입니다.Spring Boot 2.1.5를 사용하고 있습니다.풀어주다

JWT 오센티케이터를 사용한 보안 컨피규격

@Order(1)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    private static final String[] AUTH_WHITELIST = {
        "/docs/**",
        "/csrf/**",
        "/webjars/**",
        "/**swagger**/**",
        "/swagger-resources",
        "/swagger-resources/**",
        "/v2/api-docs"
    };

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers(AUTH_WHITELIST).permitAll()
            .antMatchers("/abc/**", "/abc/pdf/**").hasAuthority("ABC")
            .antMatchers("/ddd/**").hasAuthority("DDD")
            .and()
            .csrf().disable()
            .oauth2ResourceServer().jwt().jwtAuthenticationConverter(new GrantedAuthoritiesExtractor());
   }
}

사용자 이름/비밀번호 기본 인증 설정

@Order(2)
@Configuration
public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {

/*    @Bean
public UserDetailsService userDetailsService(final PasswordEncoder encoder) {
    final InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
    manager.createUser(
            User
                    .withUsername("user1")
                    .password(encoder.encode("password"))
                    .roles("ADMIN")
                    .build()
    );
    return manager;
}

@Bean PasswordEncoder encoder(){
    return new BCryptPasswordEncoder();
}*/

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/actuator/**").hasRole("ADMIN")
            .and()
            .httpBasic();
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication().withUser("user1").password("password").authorities("ADMIN");
  }
}

저는 며칠 동안 그것을 작동시키려고 노력했지만 둘 다 함께 작동시킬 수 없습니다.주문을 교환하면 기본 인증만 작동하고 JWT Auth Manager는 작동하지 않습니다.

난 많은 SOF 질문들을 겪었어

[https://stackoverflow.com/questions/40743780/spring-boot-security-multiple-websecurityconfigureradapter] [1]

[https://stackoverflow.com/questions/52606720/issue-with-having-multiple-websecurityconfigureradapter-in-spring-boot] [1]

[https://github.com/spring-projects/spring-security/issues/5593] [1]

[https://www.baeldung.com/spring-security-multiple-entry-points] [1]

아무 것도 작동하지 않는 것 같은데, 봄에 이미 알려진 문제인가요?

여러 개를 사용하려면WebsecurityConfigurerAdapter를 사용하여 특정 URL 패턴으로 제한해야 합니다.

이 경우, 보다 높은 priority를 설정할 수 있습니다.ActuatorSecurityConfig액튜에이터 엔드 포인트로만 제한합니다.

@Order(-1)
@Configuration
public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .requestMatchers().antMatchers("/actuator/**")
                .and()
                .authorizeRequests().anyRequest().hasRole("ADMIN")
                .and()
                .httpBasic();
    }
}

언급URL : https://stackoverflow.com/questions/59058596/multiple-websecurityconfigureradapter-in-spring-boot-for-multiple-patterns

반응형