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.0과 Security-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.class 및 ManagementWebSecurity스프링-부트-액추에이터 종속성이 있는 경우 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
'programing' 카테고리의 다른 글
시트의 목록 상자에서 값 가져오기 (0) | 2023.10.03 |
---|---|
조건이 고유한 경우 MySQL 고유 카운트 (0) | 2023.09.28 |
다른 변수의 thymelephth:필드 값을 설정하는 방법 (0) | 2023.09.28 |
스레드 오류 탐지를 위해 Helgrind 또는 DRD를 사용해야 합니까? (0) | 2023.09.28 |
iOS에 파일 쓰기 (0) | 2023.09.28 |