대학교 과제에서 게시판 만들기가 있어서 회원기능을 Spring Security(스프링 시큐리티)를 적용하여 사용했는데 아래와 같은 방법으로 더이상 사용되지 않는다고 표시됐다.
더 이상 WebSecurityConfigurerAdapter 를 상속받아서 스프링 시큐리티를 설정하지 않는다고 나와있다.
그렇다면 공식 홈페이지에서는 뭐라고 나와있는지 살펴보자.
스프링 공식문서 사이트에서 스프링 시큐리티를 검색해서 만드는 방법을 찾아보면 여기는 WebSecurityConfigurerAdapter를 사용하고 있었다.
그래서 다른 공식문서를 찾아보던 와중에 아래 게시글을 발견하였다.
WebSecurityConfigurerAdapter가 없는 스프링 시큐리티라는 제목이다.
스프링 시큐리티 5.7.0-M2 버전부터는 WebSecurityConfigurerAdapter를 사용하지 않는다고 나와 있다.
따라서 이제는 @Bean 을 사용하여 스프링 시큐리티를 구성해야 한다.
🧐 그렇다면 스프링 시큐리티 5.7.0을 안쓰면 되는것이 아닌가?
초록색이 무료 보안 업데이트를 지원하는 기간이고, 노란색이 상업적 지원하는 기간이다.
단순히 사용하는 것이라면 정보가 잘 나와있는 스프링 시큐리티 5.6.x 버전을 사용하면 되겠지만 2022-11-15일에 무료 지원기간도 끝나고 보안적인 측면에서도 좋지않고, 새로운 기능들을 사용할 수 없고, 기본적으로 사용하는 스프링 부트라든지 그런 곳에서도 최신 버전을 지원하게 될 것이다.
따라서 새로운 버전이 나왔다면 공식문서를 읽고 한번 배워보는 것이 어떨까?
엄청 급하다면 5.6.x 버전으로 낮추고 빠르게 사용하면 되지만 급히지 않다면 5.7.x 버전을 한 번 배워보는게 좋을듯하다.
(개발자란 직업의 숙명인가요....?)
위 내용은 Spring Boot 2.7 Release Notes (스프링부트2.7 릴리즈 노트) 중 하나이다.
(요새는 스프링부트를 많이 사용하기에 릴리즈 노트도 중요하다.)
여기서 중요한 부분은 스프링 부트 2.7은 더 이상 WebSecurityConfigurerAdapter가 사용되지 않는 스프링 시큐리티 5.7버전으로 업그레이드가 된다고 적혀 있다.
스프링부트도 이제 2.6.x버전도 이제 스프링 시큐리티 5.6.x 버전처럼 지원기간이 비슷하게 끝나는 점을 염두해두자.
🧐 WebSecurityConfigurerAdapter를 어떻게 5.7 버전처럼 사용하나요?
처음에 봤던 스프링 공식 홈페이지 블로그에서 설명이 잘 되어있지만 중요하면서 많이 사용되는 부분만 적어보겠다.
HttpSecurity 구성방법
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
}
}
앞으로 권장되는 방법은 아래와 같이 SecurityFilterChain을 @Bean 등록하는 방법으로 바뀌었다.
@Configuration
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
return http.build();
}
}
WebSecurity 구성방법
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/ignore1", "/ignore2");
}
}
앞으로 권장되는 방법은 아래와 같이 WebSecurityCustomizer를 @Bean으로 등록하는 것이다.
@Configuration
public class SecurityConfiguration {
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().antMatchers("/ignore1", "/ignore2");
}
}
📝 위 방법을 사용할 때 주의할 점!!!
WebSecurity 요청을 무시하도록 구성하는 대신에 바로 위에서 HttpSecurity를 구성할 때 authorizeHttpRequests에서 그 경로를 permitAll 하는것이 좋다. 공식문서에서는 스프링 시큐리티에서 해당 경로를 무시하는 것이기 때문에 CSRF, XSS, Clickjacking 등에서 보호하지 않는다. 따라서 이 취약점으로부터 보호하려면 HttpSecurity에서 permitAll을 하자.
'Spring > Spring' 카테고리의 다른 글
스프링부트 - 하루에 한 번 쿠키 기반 조회수 증가 구현 (1) | 2022.10.03 |
---|---|
[SpringBoot] 이미지 파일 다운로드 (0) | 2022.07.06 |
스프링에서 파일저장하기 (0) | 2022.05.11 |
[Lombok] @NoArgsConstructor, @ToString (0) | 2022.04.11 |
스프링부트 시큐리티 - SNS 로그인과 SNS 회원가입 (0) | 2022.03.17 |