본문 바로가기
스프링

[스프링 시큐리티] 스프링 부트 3.X 이상의 시큐리티

by 근즈리얼 2023. 6. 1.
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

댓글