📄 build.gradle
dependencies {
# spring security
implementation 'org.springframework.boot:spring-boot-starter-security'
# security tag 사용
implementation 'org.springframework.security:spring-security-taglibs'
}
📄 application.properties
# Security logging
logging.level.org.springframework.security=debug
📄 SecurityConfig.java
@Configuration // 1
@EnableWebSecurity // 2
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomAuthenticationSuccessHandler customAuthenticationSuccessHandler;
@Autowired
private CustomAuthenticationFailureHandler customAuthenticationFailHandler;
@Bean // 3
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public AuthenticationProvider authenticationProvider() {
return new CustomAuthenticationProvider();
}
@Override // 4
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/css/**", "/js/**", "/img/**", "/lib/**");
}
@Override // 5
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/", "/error", "/favicon.ico",
"/**/*.css",
"/**/*.js",
"/**/*.png",
"/**/*.jpg",
"/login*/*").permitAll()
.antMatchers("/member/*")
.authenticated()
.and()
.formLogin()
.loginPage("/login")
.successHandler(customAuthenticationSuccessHandler)
.failureHandler(customAuthenticationFailHandler)
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login")
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.invalidateHttpSession(true);
}
@Override // 6
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider());
}
}
authorizeRequests() | 요청 경로 URL 패턴 지정 |
permitAll() | 모든 사용자에게 접근 허용 |
authenticated() | 인증된 사용자에게만 접근 허용 |
anonymous() | 인증되지 않은 사용자에게만 접근 허용 |
denyAll() | 모든 사용자 접근 금지 |
hasRole() | 특정 권한을 가진 사용자만 접근 |
loginPage(URL) | 로그인 페이지 경로 |
successHandler(성공 커스텀 핸들러) | 로그인 성공시 핸들러 |
failureHandler(실패 커스텀 핸들러) | 로그인 실패 시 핸들러 |
logoutUrl(URL) | 로그아웃 경로 설정 |
logoutRequestMatcher( new AntPathRequestMatcher(경로) ) | 로그아웃 경로 설정 |
logoutSuccessUrl() | 로그아웃 성공 시 이동할 경로 |
invalidateHttpSession() | 로그아웃 성공 시 세션 제거 |
* logout()과 csrf 사용 시 POST 요청을 통해 logout 해야함
6. configure(AuthenticationManagerBuilder auth)
사용자 인증을 위한 로직 담당
[WEB] RESTful API 만들기 (0) | 2021.03.22 |
---|---|
[JPA] 게시판 CRUD (0) | 2021.03.21 |
[SPRING SECURITY] 스프링 시큐리티란 (0) | 2021.03.14 |
[SPRING BOOT] 디렉터리 구조 (0) | 2021.03.13 |
[SPRING BOOT] 환경설정 (0) | 2021.03.13 |
댓글 영역