application.properties를 사용하여 봄에 CSRF를 비활성화하려면 어떻게 해야 합니까?
다음 속성이 있습니다.
security.enable-csrf=false
속성을 에 추가하는 경우 BUT csrf 보호는 아직 유효합니다.application.properties
.
동작하는 것은, 그것을 프로그램적으로 무효로 하는 것입니다.
하지만 속성 구성을 선호합니다.왜 안 되는 거죠?
@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.csrf().disable();
}
}
처럼WebSecurityConfigurerAdapter
필수 접근 방식을 사용하여 가치의 주입을 할 수 있습니다.security.enable-csrf
CSRF가 false일 경우 CSRF를 disable로 합니다.맞아요, 이건 처음부터 할 수 있을 것 같아요.
@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Value("${security.enable-csrf}")
private boolean csrfEnabled;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
if(!csrfEnabled)
{
http.csrf().disable();
}
}
}
dev spring profile이 활성화 되어 있을 때 application.yml에서 변수를 false로 설정했습니다.단, nosecurity라는 프로파일을 작성할 수도 있습니다.이 프로세스는 매우 간단합니다.
--- application.yml ---
# Production configuration
server:
port: ${server.web.port}
admin.email: ${admin.email}
#etc
---
spring:
profiles: dev
security.enable-csrf: false
#other Development configurations
니즈에 맞았으면 좋겠다
2017년 12월 17일 갱신
Spring Boot 멤버의 코멘트에 따라 이 문제는 Spring의 새로운 버전에서 수정되었습니다.나는 그것을 버전으로 가지고 있었다.1.5.2.RELEASE
버전 1.5.9에서는 그런 것 같습니다.RELEASE(버전 2 이전까지 안정된 최신 버전)는 이미 고정되어 있으며 기본적으로는 csrf는 디세이블이며 다음과 같이 이니블로 할 수 있습니다.security.enable_csrf: true
따라서 가능한 해결책은 버전으로의 업그레이드일 수 있습니다.1.5.9.RELEASE
아키텍처가 상당히 다를 수 있는 버전2로 메이저를 만들기 전.
업데이트:
spring-boot 1.x에서 application.properties를 사용하여 CSRF를 디세블로 하는 데 문제가 있는 것 같습니다(또한 이 케이스를 오픈한 Eliux 덕분입니다).
따라서 임베디드 Tomcat을 사용한Spring-boot 1.5.7 솔루션은 SecurityConfig 클래스를 통한 CSRF를 디세블로 하는 것입니다(이 방법으로 Tomcat otb 기본 인증을 유지합니다).
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// Note:
// Use this to enable the tomcat basic authentication (tomcat popup rather than spring login page)
// Note that the CSRf token is disabled for all requests (change it as you wish...)
http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
// Add here any custom code you need in order to get the credentials from the user...
auth.inMemoryAuthentication()
.withUser("myUserName")
.password("myPassword")
.roles("USER");
}
}
spring-security.xml 파일에서 다음 행을 사용하여 디세블로 할 수 있었습니다.
<보안: securityf disabled="true"/>
언급URL : https://stackoverflow.com/questions/44824382/how-to-disable-csrf-in-spring-using-application-properties
'programing' 카테고리의 다른 글
스프링 부트 웹 응용 프로그램에서 JSP 파일이 렌더링되지 않음 (0) | 2023.03.14 |
---|---|
JSON을 나타내는 Redis 문자열 vs Redis 해시: 효율성? (0) | 2023.03.14 |
WordPress에서 wp_get_nav_menu_items를 사용하여 커스텀 메뉴/서브메뉴 시스템을 생성하는 방법은 무엇입니까? (0) | 2023.03.14 |
스프링 부트 기본 로그 위치 (0) | 2023.03.14 |
네이티브 응답 오류: 요소 유형이 잘못되었습니다. 문자열 또는 클래스/함수가 필요한데: 개체를 받았습니다. (0) | 2023.03.14 |