• Spring Boot : SecurityConfig.java 정리
    Spring Boot 🍃 2023. 12. 17. 00:01

    Spring Boot 2.7 ~ 3.1 동작 확인

    debug 설정 + Basic 인증 사용 + h2 web console = true 설정한 경우

    @EnableWebSecurity(debug = true)
    @Configuration
    public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http,
    HandlerMappingIntrospector introspector) throws Exception {
    MvcRequestMatcher.Builder mvcMatcher = new MvcRequestMatcher.Builder(introspector);
    http.authorizeHttpRequests(config -> config
    .requestMatchers(PathRequest.toH2Console()).permitAll()
    .requestMatchers(
    mvcMatcher.pattern("/sign-up/**"),
    mvcMatcher.pattern("/check/**"),
    mvcMatcher.pattern("/sign-in/**")).permitAll()
    .anyRequest().authenticated());
    http.httpBasic(withDefaults());
    http.csrf(AbstractHttpConfigurer::disable);
    http.headers(AbstractHttpConfigurer::disable);
    return http.build();
    }
    @Bean
    public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
    }
    @Bean
    public UserDetailsService userDetailsService() {
    UserDetails user = User.builder()
    .username("zhyun")
    .password("{noop}qweasd")
    .roles("USER")
    .build();
    UserDetails admin = User.builder()
    .username("gimwlgus")
    .password("{noop}zxcasd")
    .roles("ADMIN")
    .build();
    return new InMemoryUserDetailsManager(user, admin);
    }
    }
     

    debug 설정 + Form Login 사용 + 정적 리소스 모두 허용 + filter 추가

    @Slf4j
    @RequiredArgsConstructor
    @EnableWebSecurity(debug = true)
    @Configuration
    public class SecurityConfiguration {
    private final AccountService accountService;
    private final UserAuthenticationSuccess userAuthenticationSuccess;
    @Value("${server.servlet.context-path}")
    private static String CONTEXT_PATH_PROPERTY;
    public static final String CONTEXT_PATH = Objects.isNull(CONTEXT_PATH_PROPERTY) ? "/mission" : CONTEXT_PATH_PROPERTY;
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
    return httpSecurity
    .authorizeHttpRequests(
    auth -> auth
    .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
    .requestMatchers(
    "/login/**",
    "/join/**",
    "/kiosk/**",
    "/error/**"
    ).permitAll()
    .requestMatchers("/", "/seller/**").hasRole("SELLER")
    .requestMatchers("/", "/store/**", "/review/**").hasRole("CUSTOMER")
    .anyRequest().authenticated()
    )
    .csrf(AbstractHttpConfigurer::disable)
    .headers(AbstractHttpConfigurer::disable)
    .formLogin(
    login -> login
    .loginPage("/login").permitAll()
    .successHandler(userAuthenticationSuccess)
    )
    .addFilterBefore(new SecurityExceptionHandlerFilter(), UsernamePasswordAuthenticationFilter.class)
    .addFilterBefore(new SecurityLoginFilter(accountService , passwordEncoder()), UsernamePasswordAuthenticationFilter.class)
    .logout(
    logout -> logout
    .logoutSuccessUrl("/")
    .invalidateHttpSession(true)
    )
    .build();
    }
    @Bean
    public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
    }
    }




     

Designed by Tistory / Custom by 얼거스