스프링부트 2.5 이상 SecurityConfig 설정 예
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Configurable; import org.springframework.context.annotation.Bean; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import hackertontest.test.config.auth.PrincipalDetailService; @Configurable @EnableWebSecurity @EnableGlobalMethodSecurity(securedEnabled = true,prePostEnabled = true) // secured 어노테이션 활성화 public class SecurityConfig { @Autowired private PrincipalDetailService principalDetailService; // 해당 메서드의 리턴되는 오브젝트를 IoC 로 등록해 준다. @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public AuthenticationManager authenticationManagerBean(AuthenticationConfiguration configuration) throws Exception { return configuration.getAuthenticationManager(); } @Bean public AuthenticationProvider authenticationProvider() { var provider = new DaoAuthenticationProvider(); provider.setUserDetailsService(principalDetailService); provider.setPasswordEncoder(passwordEncoder()); return provider; } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf().disable(); http.authorizeRequests().antMatchers("/user/**").authenticated() // 인증만 되면 들어갈 수 있는 주소!! .antMatchers("/manager/**").hasAnyAuthority("ADMIN", "MANAGER") .antMatchers("/admin/**").hasAnyAuthority("ADMIN") .anyRequest().permitAll() .and() .formLogin() .loginPage("/auth/loginForm") //로그인 페이지 URL 을 설정 .loginProcessingUrl("/auth/loginProc") //스프링 시큐리티가 해당 주소로 요청오는 로그인을 가로채서 대신 로그인 해준다. 적지 않으면 .loginPage("/auth/loginForm") 값이 기본값 처리 .usernameParameter("username") //로그인시 사용할 파라미터 이름으로 username (또는 email) 여기서는 username 을 지정 .passwordParameter("password") //없을시 기본값 :password .defaultSuccessUrl("/") // 로그인 성공시 이동할 URL 을 설정 .failureUrl("/auth/loginForm/error") // 로그인 실패시 이동할 URL 을 설정 .and() .logout() .logoutUrl("/auth/logout") .logoutRequestMatcher(new AntPathRequestMatcher("/auth/logout")) // 임의로그아웃 URL 을 설정하면당 스프링시큐리티가 해당 url 로 로그아웃 처리 . 기본 값은 logout .logoutSuccessUrl("/"); //로그아웃 성공시 이동할 URL 을 설정 return http.build(); } @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**").allowedMethods("*"); } }; } }
댓글 ( 4)
댓글 남기기