SpringSecurity는 spring에서의 보안 모듈로 웹 어플리케이션의 인증과 인가를 담당한다.
SpringConfig 설정
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
}
| 메서드 | 설명 |
|---|
authorizeRequests() | HttpServletRequest를 사용하는 요청들에 대한 접근 제한 설정 |
antMatchers() | 특정 경로를 지정 |
permitAll() | 모든 사용자에게 접근 권한 허용 |
anyRequest().authenticated() | 인증되지 않은 모든 요청을 차단하고 인증을 요구 |
formLogin() | 폼 기반 로그인을 사용하도록 설정 |
loginPage() | 사용자 정의 로그인 페이지 경로 지정 |
logout() | 로그아웃 지원 |
쿠키 기반 인증 설정
http
.rememberMe()
.key("uniqueAndSecret")
.tokenValiditySeconds(60 * 60 * 24);
| 메서드 | 설명 |
|---|
rememberMe() | 사용자가 웹 사이트에 다시 방문할 때 로그인 유지 |
key(String) | remberMe 쿠키를 생성할 때 사용 |
tokenValiditySeconds(int) | 토큰 유효 시간 설정 (단위: 초) |
세션 관리 설정
http
.sessionManagement()
.sessionFixation().none()
.maximumSessions(1)
.maxSessionsPreventsLogin(false)
.expiredUrl("/session-expired");
| 메서드 | 설명 |
|---|
sessionFixation().none() | 세션 고정 공격에 대해 아무런 조치를 취하지 않음 |
maximumSessions(int n) | 동시 세션 제어로 사용자당 최대 세션 수 n으로 제한 |
maxSessionsPreventsLogin(boolean) | 최대 세션 도달 후 추가 로그인 방지하지 않음false 설정 시 새로운 세션 생성이 허용되며 이전 세션은 만료 |
expiredUrl(String url) | 세션이 만료된 경우, 사용자를 리디렉션할 URL 설정 |
CSRF 설정
http
.csrf()
.csrfTokenRepository(CookieCsrfToken Repository.withHttpOnlyFalse());
| 메서드 | 설명 |
|---|
csrf() | Cross㎼Site Request Forgery 보호 활성화 |
csrfTokenRepository() | csrf 토큰 쿠키에 저장 |
withHttpOnlyFalse() | 생성된 쿠키가 HttpOnly 속성을 false로 설정 |
HTTPS 설정
http
.requiresChannel()
.anyRequest()
.requiresSecure();
| 메서드 | 설명 |
|---|
requiresChannel() | HTTP 채널 요구사항 설정 |
anyRequest().requiresSecure() | 어떤 요청이든지 안전한 채널, 즉 HTTPS를 통해 이루어져야 함을 요구 |