programing

Spring Boot 2.0.x가 특정 프로파일에 대해 보안을 사용하지 않도록 설정함

muds 2023. 9. 28. 08:53
반응형

Spring Boot 2.0.x가 특정 프로파일에 대해 보안을 사용하지 않도록 설정함

Spring Boot 1.5.x에서 보안을 구성하고 특정 프로필(예: 로컬)에서 추가했습니다.security.basic.enabled=false.properties 파일에 줄을 서 해당 프로파일에 대한 모든 보안을 사용하지 않도록 설정합니다.해당 구성 속성이 제거된 새 Spring Boot 2로 마이그레이션하려고 합니다.Spring Boot 2.0.x에서 (이 속성을 사용하지 않고) 동일한 동작을 수행하려면 어떻게 해야 합니까?

Spring-Boot-Security-2.0Security-Changes-in-spring-boot-2-0-m4를 이미 읽었는데 이 속성에 대해서는 아무것도 없습니다.

사용자 지정 Spring Security 구성을 추가해야 합니다. Spring Boot Reference Guide:

28.1 MVC 보안

기본 보안 구성은 다음에서 구현됩니다.SecurityAutoConfiguration그리고.UserDetailsServiceAutoConfiguration.SecurityAutoConfiguration수입품SpringBootWebSecurityConfiguration웹 보안을 위해 그리고.UserDetailsServiceAutoConfiguration인증을 구성합니다. 이는 웹이 아닌 응용프로그램에서도 관련이 있습니다.기본 웹 응용 프로그램 보안 구성을 완전히 끄려면 유형을 추가할 수 있습니다.WebSecurityConfigurerAdapter(그렇게 해도 실행 중지되지 않습니다.UserDetailsService구성 또는 액추에이터의 보안).

예를 들어,

@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web
           .ignoring()
               .antMatchers("/**");
    }
}

프로파일에만 구성을 사용하려면 클래스에 추가합니다.속성별로 활성화하려면 클래스에 추가합니다.

제가 그 문제를 해결하게 된 계기는 이렇습니다.다음은 Spring Boot 1.5.x에서 보안 구성이 속성으로 비활성화된 경우의 예입니다.security.basic.enabled=false:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/upload/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests()
                .anyRequest().authenticated()
                .and().httpBasic();
    }
}

부터security.basic.enabled스프링부트 2에서 제거되었습니다. (그러나 여전히 속성 이름으로 예약되어 있음) 결국 사용하게 되었습니다.security.enabled관습 재산으로서다음은 Spring Boot 2에서 내 구성이 어떻게 보이는지 보여주는 예입니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${security.enabled:true}")
    private boolean securityEnabled;

    @Override
    public void configure(WebSecurity web) throws Exception {
        if (securityEnabled)
            web.ignoring().antMatchers("/upload/**");
        else
            web.ignoring().antMatchers("/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        if (securityEnabled)
            http.csrf().disable().authorizeRequests()
                    .anyRequest().authenticated()
                    .and().httpBasic();
    }
}

스프링 부트 2에서 보안을 해제하는 다른 옵션이 있습니다.

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})

기본 클래스에 추가

Security를 제외하고 spring security auto-configuration을 비활성화할 수 있습니다.AutoConfiguration.classManagementWebSecurity스프링-부트-액추에이터 종속성이 있는 경우 AutoConfiguration.class를 제외해야 함

@SpringBootApplication(
exclude = { SecurityAutoConfiguration.class,  
            ManagementWebSecurityAutoConfiguration.class })
public class MySpringBootApplication {

그런 다음 프로파일 또는 구성 매개 변수를 사용하여 사용자 지정 WebSecurityConfigureAdapter를 조건부로 구성할 수 있습니다.

@Configuration
@ConditionalOnProperty(prefix = "security.custom", name = "enabled", havingValue="true")
@EnableWebSecurity
public class CustomWebSecurityConfiguration extends WebSecurityConfigurerAdapter {

스프링 부츠 2.1.3

특정 프로필 "dev"의 경우

새 Spring Configuration 클래스 만들기

@Configuration
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
@Profile("dev")
public class WebSecurityConfigDisable  {

}

스프링 보안이 비활성화됩니다.

실제로 이 질문에 대한 특정 구성에 대한 몇 가지 답변이 있습니다. 제 경우에는 Spring Security 및 JWT로 Spring Boot 2를 플레이해 왔습니다.REST 엔드포인트를 보호하려면 토큰 등을 만들어야 합니다.코드를 작성하고 엔드포인트를 테스트하여 JWT가 정상적으로 작동하는지 확인한 후 기본 로그인 페이지를 보게 됩니다.위에서 언급한 속성 파일을 변경하려고 시도했고, 결국 애플리케이션 클래스에 주석을 추가하여 비활성화했습니다.

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
public class JwtWithSpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(JwtWithSpringBootApplication.class, args);
    }
}

봄부츠 2.1.4 나는 이것을 해야만 했습니다.

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, SecurityFilterAutoConfiguration.class})

언급URL : https://stackoverflow.com/questions/49258766/spring-boot-2-0-x-disable-security-for-certain-profile

반응형