WebSecurityConfigurerAdapter 대체
Spring Security 6.0 버전을 기준으로 WebSecurityConfigurerAdapter를 import를 하지 못한다.
WebSecurityConfigurerAdapter를 대체하는 방법에 대해 알아보겠습니다.
커스텀 컴포넌트 설정 방법
configure(httpSecurity 설정)
- 기존 방식의 코드
@Configuration @EnableWebSecurity public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.cors().and().csrf().disable() .and().authorizeRequests() .antMatchers("/home").permitAll() .antMatchers("/mypage").authenticated() .anyRequest().authenticated() ; } }
- 변경한 코드
@Configuration @EnableWebSecurity public class WebSecurityConfiguration { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.cors().and().csrf().disable() .and().authorizeRequests() .antMatchers("/home").permitAll() .antMatchers("/mypage").authenticated() .anyRequest().authenticated() return http.build(); } }
- 설명
- WebSecurityConfigurerAdapter를 제거한 코드에서는 @Bean 어노테이션을 이용하여 등록해야한다.
- HttpSecurity 자체를 변경할 필요는 없다.
- 주의할 점은 메서드 이름을 configure -> filterChain 으로 변경해야한다.
.
AuthenticationManager
- 기존 방식의 코드
@Configuration @EnableWebSecurity public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Autowired UserDetailsService userDetailsService; @Override public void configure( AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { authenticationManagerBuilder.userDetailsService(userDetailsService) .passwordEncoder(passwordEncoder()); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
- 변경한 코드
@Configuration @EnableWebSecurity public class WebSecurityConfiguration { @Bean AuthenticationManager authenticationManager( AuthenticationConfiguration authenticationConfiguration) throws Exception { return authenticationConfiguration.getAuthenticationManager(); } }
- 설명
- 스프링 시큐리티의 인증을 담당하는 AuthenticationManger는 AuthenticationManagerBuilder를 이용해서 userDetailsService와 passwordEncoder를 설정해야한다.
- 변경된 방식에서는 AuthenticationManager Bean 생성 시 스프링 내부 동작으로 인해 userDetailsService와 passwordEncoder가 자동 설정된다.
web.ignoring
- 기존 방식의 코드
@EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override public void configure(WebSecurity web) { web.ignoring().antMatchers("/ignore1", "/ignore2"); } }
- 변경한 코드
@EnableWebSecurity public class SecurityConfiguration { @Bean public WebSecurityCustomizer webSecurityCustomizer() { return (web) -> web.ignoring().antMatchers("/ignore1", "/ignore2"); } }
- 설명
- WebSecurity를 커스텀할 때 WebSecurityCustomizer 인터페이스를 사용한다.
- "/ignore1", "/ignore2" 요청에 대해서는 스프링 시큐리티를 적용하지 않는다.
- webSecurityCustomizer 메서드를 @Bean 처리를 한다.
In-Memory Authentication 설정
- 기존 방식의 코드
@Configuration public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("ADMIN") .build(); auth.inMemoryAuthentication().withUser(user); } }
- 변경한 코드
@Configuration public class SecurityConfiguration { @Bean public InMemoryUserDetailsManager userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("ADMIN") .build(); return new InMemoryUserDetailsManager(user); } }
- 설명
- userDetailsService를 Bean 이름으로 하며 InMemoryUserDetailsManager 변환값을 갖는 빈을 설정한다.
참고 자료
Spring Security without the WebSecurityConfigurerAdapter
In Spring Security 5.7.0-M2 we deprecated the WebSecurityConfigurerAdapter, as we encourage users to move towards a component-based security configuration. To assist with the transition to this new style of configuration, we have compiled a list of common
spring.io
Spring Security — H2 Database -Without WebSecurityConfigurerAdapter
In spring security 5.7 version, “WebSecurityConfigurerAdapter” deprecated.
medium.com
반응형
'Spring > 스프링 이론' 카테고리의 다른 글
[Spring Security] @AuthenticationPrincipal 로그인 정보 받아오기 (0) | 2023.12.23 |
---|---|
스프링부트를 이용한 유효성 검사(feat. Validation) (0) | 2023.11.22 |
[Spring] 트랜잭션과 @Transactional 이해하기 (0) | 2023.10.24 |
댓글