728x90
안녕하세요. 스프링 부트가 3.x 이상이 되면서 스프링 시큐리티의 변화에 대해서 포스팅해보려고 합니다.
우선, 간략하게
SecurityConfig 클래스를 만들 때 상속을 받고 @Overiding을 통해 소스코드를 구현했었습니다.
하지만,
버전이 달라지면서 따로 상속을 받지 않고 @Bean으로 등록해서 사용하면 됩니다.
코드로 정리해보겠습니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public InMemoryUserDetailsManager userDetailsManager() {
UserDetails userRole = User.builder().username("user")
.password(passwordEncoder().encode("1111")).roles("USER").build();
UserDetails managerRole = User.builder().username("manager")
.password(passwordEncoder().encode("1111")).roles("MANAGER").build();
UserDetails adminRole = User.builder().username("admin")
.password(passwordEncoder().encode("1111")).roles("ADMIN").build();
List<UserDetails> userDetails = new ArrayList<>();
userDetails.add(userRole);
userDetails.add(managerRole);
userDetails.add(adminRole);
return new InMemoryUserDetailsManager(userDetails);
}
@Autowired
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
@Bean
protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http
.authorizeHttpRequests(request -> request
.requestMatchers("/").permitAll()
.requestMatchers("/mypage").hasRole("USER")
.requestMatchers("/message").hasRole("MANAGER")
.requestMatchers("/config").hasRole("ADMIN")
.anyRequest().authenticated())
.formLogin(
AbstractAuthenticationFilterConfigurer::permitAll);
return http.build();
}
}
위의 코드는 요청 api에 따라 권한 체크를 한뒤 response를 돌려주는 코드입니다.
앞서 말했던 것처럼 SecuriyConfig에 상속을 받는 부분은 다 사라졌고요~
@Bean을 이용해서 직접 빈등록 후 사용하는 것을 볼 수 있습니다.
저는 메모리안에 사용자를 직접 만들어서 사용하려고 했는데 이 부분에서 정말 많은 시간을 할애하고 스프링 공부도 함께 한거 같네요 ㅎㅎ
InMemoryUserDetailsManager안에 여러개의 권한을 리스트로 만들어서 넣는 것도 가능하네요 ㅎㅎ
728x90
'스프링' 카테고리의 다른 글
[스프링] 스케줄러 cron 사용하기 (0) | 2023.07.26 |
---|---|
[스프링 시큐리티]JWT 토큰안에 내가 원하는 값 넣기 (0) | 2023.04.10 |
[스프링 시큐리티] redis를 이용한 jwt 로그아웃 만들기 (2) | 2023.01.31 |
[스프링 시큐리티] custom한 authentication받기 (0) | 2023.01.25 |
스프링 이메일 인증 (0) | 2021.11.12 |
댓글