[좌충우돌 개발일지 - Spring Security] WebSecurityConfigurerAdapter - Deprecated
2022. 12. 14. 06:01ㆍ프로그래머스/TIL
spring security 강의를 듣던 중 강사님께서 쓰시는 WebSecurityConfigurerAdapter가 현재는 Deprecated 되었다.
난 강의를 늦게 들어서 먼저 강의를 수강했던 팀원들의 도움을 받았다.
기존에는 WebSecurityConfigurerAdapter를 상속받아서 Configuration을 만들었었는데
이를 SecurityFilterChain을 빈 등록해서 사용하는 방식으로 바뀌었다. 아래는 잘 설명되어있는 블로그 글이다.
https://devlog-wjdrbs96.tistory.com/434
=> 해당 글에 있는 공식문서를 이용해서 고치면 좋을 것 같다.
spring boot 2.7.6 사용
기존코드와 변경된 코드의 차이점
[ 기존 코드 ]
@Configuration
@EnableWebSecurity
public class WebSecurityConfigure extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/assets/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/me").hasAnyRole("USER", "ADMIN")
.anyRequest().permitAll()
.and()
.formLogin()
.defaultSuccessUrl("/")
.permitAll()
.and()
;
}
}
[ 변경 코드 ]
@Configuration
@EnableWebSecurity
public class WebSecurityConfigure {
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().antMatchers("/assets/**");
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/me").hasAnyRole("USER", "ADMIN")
.anyRequest().permitAll()
.and()
.formLogin()
.defaultSuccessUrl("/")
.permitAll()
.and();
return http.build();
}
}
- WebSecurityCustomizer에서 ignoring은 spring security에서 관리할 필요가 전혀없는 요청에 대해 스프링 시큐리티에서 무시하도록 하는 설정이다. -> 일반적으로 정적 리소스를 무시한다.
- 이걸 무시하면 뭐가 좋을까? FilterChainProxy 라는 클래스가 있는데 이는 스프링 시큐리티의 진입점과 같은 역할을 한다. 요청이 들어왔을 때 해당 요청을 처리할 스프링시큐리티 필터체인을 구성하고 요청을 처리한다.
- 근데 이 필터체인에 포함되는 필터의 수가 꽤 많기 때문에 매번 모든 요청에 대해 구성하고 실행하는건 비효율적이다. -> ex) 정적 요청 (물론 정적 리소스에 대해 실행한다고 해서 문제가 되진 않음. 다만 비효율적)
- 설정안하면 index.html을 들고올때 스프링 시큐리티를 처리하고 그 페이지 내부적으로 어떤 아이콘이나 사진들을 들고 올때도 처리를 하게됨. -> 하나의 페이지에서도 처리될 필요가 없는 정적 리소스에 대한 시큐리티 처리가 여러번 처리됨. -> 굉장히 비효율적
- filterChain
- authorizeRequests는 요청들에 대해서 인증/인가하겠다는 것을 의미
- anyMatchers는 /me에 접근을 하기 위해서 해당 role 중 하나를 가지고 있어야한다는 것
- defaultSuccessUrl은 인증/인가에 성공하면 어느 경로로 이동하는지를 설정.
'프로그래머스 > TIL' 카테고리의 다른 글
[좌충우돌 개발일지 - AToZ 프로젝트] 동시성 이슈에 관한 내용 (0) | 2022.12.16 |
---|---|
[좌충우돌 개발일지 - Spring Security] 로그아웃, 쿠키 기반 자동로그인 (rememberMe) (0) | 2022.12.14 |
[좌충우돌 개발일지 - Spring Security] DelegatingPasswordEncoder (0) | 2022.12.14 |