HttpSecurity는 인증, 인가의 세부적인 기능을 설정할 수 있도록 API를 제공해주는 클래스이다.
WebSecurityConfigurerAdapter를 상속하여 configure(HttpSecurity http) 메서드를 오버라이드 해 설정한다.
@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
}
}
formLogin
http.formLogin()은 form을 통한 로그인 방식에 대해 설정을 한다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin()
.loginPage("") // 사용자 정의 로그인 페이지
.defaultSuccessUrl("") // 로그인 성공 후 이동 페이지
.failureUrl("") // 로그인 실패 후 이동 페이지
.usernameParameter("") // 아이디 파라미터명 설정
.passwordParameter("") // 패스워드 파라미터명 설정
.loginProcessingUrl("") // 로그인 Form Action Url
.successHandler((request, response, authentication) -> {}) // 로그인 성공 후 핸들러
.failureHandler((request, response, exception) -> {}); // 로그인 실패 후 핸들러
}
logout
http.logout()은 로그아웃에 대한 설정을 한다.
http.logout()
.logoutUrl("") // 로그아웃 처리 URL
.logoutSuccessUrl("") // 로그아웃 성공 후 이동페이지
.deleteCookies("") // 로그아웃 후 쿠키 삭제
.addLogoutHandler((request, response, authentication) -> {}) // 로그아웃 핸들러
.logoutSuccessHandler((request, response, authentication) -> {}); // 로그아웃 성공 후 핸들러
rememberMe
http.rememberMe()란 로그인한 유저의 SessionId가 서버에서 만료가 되었더라도, remember-me 쿠키값이 유효하면 로그인을 유지시켜주는 기능이다.
http.rememberMe()
.rememberMeParameter("remember") // 기본 파라미터명은 remember-me
.tokenValiditySeconds(3600) // Default 는 14일
.alwaysRemember(true); // 리멤버 미 기능이 활성화되지 않아도 항상 실행
sessionManagement
http.sessionManagement()는 세션을 설정한다.
두 번째 설정인 동시 로그인 차단은 세션 허용 범위를 넘어섰을 때 로그인 시도 시 로그인 처리를 차단한다.
기존 세션 만료란 세션 허용 범위를 넘어섰을 때 로그인 시도 시 기존의 세션을 만료시키고 로그인을 진행한다.
http.sessionManagement()
.maximumSessions(1) // 최대 허용 가능 세션 수 , -1 : 무제한 로그인 세션 허용
.maxSessionsPreventsLogin(true) // true 동시 로그인 차단, false 기존 세션 만료
.expiredUrl("/expired"); // 세션이 만료된 경우 이동 할 페이지
http.sessionManagement().sessionFixation()
.changeSessionId();
해커가 어떤 유저의 SESSION ID를 가지고 있다면, 유저가 로그인했을 시 해커는 유저의 계정으로 로그인이 가능하게 된다.
changeSessionId()는 인증 성공 시 SESSION ID를 변경함으로써 해커가 가지고 있는 SESSION ID를 무용지물로 만든다.
authorizeRequests
접근하는 url에 따라 인가를 설정한다.
http.authorizeRequests()
.antMatchers("").authenticated() //인증된 사용자의 접근을 허용
.antMatchers("").fullyAuthenticated() //인증된 사용자의 접근을 허용, rememberMe 인증 제외
.antMatchers("").permitAll() //무조건 접근을 허용
.antMatchers("").denyAll() //무조건 접근을 허용하지 않음
.antMatchers("").anonymous() //익명사용자의 접근을 허용
.antMatchers("").rememberMe() //기억하기를 통해 인증된 사용자의 접근을 허용
.antMatchers().access("") //주어진 SpEL 표현식의 평가 결과가 true이면 접근을 허용
.antMatchers("").hasRole("") //사용자가 주어진 역할이 있다면 접근을 허용
.antMatchers("").hasAuthority("") //사용자가 주어진 권한이 있다면 접근 허용
.antMatchers("").hasAnyAuthority("") //사용자가 주어진 권한 중 어떤 것이라도 있다면 접근을 허용
.antMatchers("").hasAnyRole() //사용자가 주어진 권한이 있다면 접근을 허용
.antMatchers("").hasIpAddress(""); //주어진 IP로부터 요청이 왔다면 접근을 허용
csrf
csrf 설정은 서버에 요청 시 서버에서 발급해준 토큰을 HTTP 파라미터로 보냄으로써 보안을 강화하는 기능이다.
http.csrf();
http.csrf().disable();
'Spring Security' 카테고리의 다른 글
Spring Security - WebSecurityConfigurerAdapter (0) | 2021.11.23 |
---|---|
Spring Security 의존성 추가하기 (0) | 2021.11.22 |
Spring Security 공부하기 앞서서.. (0) | 2021.11.22 |
댓글