Spring Boot 기반으로 개발하는 Spring Security : 동시 세션 제어, 세션 고정 보호, 세션 정책
2023. 4. 15. 11:29
무조건 따라하기/Spring Boot 기반 Security
동시 세션 제어 최대 허용 세션이 초과했을 경우 시큐리티는 2개의 설정이 있다. sessionManagement > maxSessionsPreventsLogin() 를 사용하여 기본값은 false로 기존 세션을 만료시키고 true는 현재 접속하는 세션을 차단한다. http.sessionManagement() .maximumSessions(1) // 최대 허용 가능 세션 수, -1 : 무제한 .maxSessionsPreventsLogin(false) // 동시 로그인 차단함, false : 기존 세션 만료 (default) .expiredUrl("/expired") // 세션이 만료된 경우 이동할 페이지 테스트 maxSessionsPreventsLogin를 true로 설정해서 초과하는 세션을 차단할 경우 ..
Spring Boot 기반으로 개발하는 Spring Security : AnonymousAuthenticationFilter
2023. 4. 15. 11:13
무조건 따라하기/Spring Boot 기반 Security
AnonymousAuthenticationFilter 이란? 익명사용자 인증 처리 필터 익명사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용 화면에서 인증 여부를 구현할 때 isAnonymous() 와 isAuthenticated() 로 구분해서 사용 인증객체를 세션에 저장하지 않는다 이미지로 플로우 확인 사용자가 자원에 접근하면 AnonymousAuthenticationFilter가 요청을 받는다. SecurityContextHolder(이하 SC)에 인증객체가 존재하는지 확인한다. 인증객체가 있다면 다음필터가 진행 인증객체가 없다면 AnonymousAuthenticationToken(익명사용자 토큰)을 생성해 SC에 저장 한다. (사용인증객체를 세션에 저장하지 않는다) SC에 저장한 Anon..
Spring Boot 기반으로 개발하는 Spring Security : RememberMeAuthenticationFilter
2023. 4. 13. 22:31
무조건 따라하기/Spring Boot 기반 Security
RememberMe 인증 과정 간단 설명 RememberMeAuthenticationFilter SecurityContext 안에 Authentication이 없고 RememberMe 쿠키가 있는 경우 RememberMeAuthenticationFilter가 동작하게 된다. RememberMeService RememberMeService는 구현체가 두개가 있다. TokenBasedRememberMeServices : 메모리에서 저장한 토큰과 사용자가 요청한 토큰을 비교해서 인증처리한다. PersistentTokenBasedRememberMeServices : DB에 토큰을 저장하고 요청한 토큰과 비교해서 인증처리한다. RememberMe 인증 과정 코드 1. JSESSIONID이 있으면 아무리 새로고침을..
Spring Boot 기반으로 개발하는 Spring Security : Remember Me 인증
2023. 4. 13. 21:48
무조건 따라하기/Spring Boot 기반 Security
Remember Me 설정 @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { //region rememberMe http .rememberMe() .rememberMeParameter("remember") // 기본 파라미터명은 remember-me .tokenValiditySeconds(3600) // 유지 시간 Default 는 14일 .alwaysRemember(false) // 리멤버 미 기능을 활성화하지 않아도 계속 실행할 것인지 //endregion ; return http.build..
Spring Boot 기반으로 개발하는 Spring Security : LogoutFilter
2023. 4. 11. 22:07
무조건 따라하기/Spring Boot 기반 Security
Logout 스프링 시큐리티는 아래와 같은 설정으로 세션, 인증토큰, 쿠키정보를 삭제해 로그아웃시킬 수 있다 //region logout http .logout() //Post Method .logoutUrl("/logout") // 로그아웃 처리 url .logoutSuccessUrl("/login") // 로그아웃 성공 후 이동페이지 .addLogoutHandler(new LogoutHandler() { // 로그아웃 핸들러 @Override public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { HttpSession session = request.getSes..
Spring Boot 기반으로 개발하는 Spring Security : UsernamePasswordAuthenticationFilter
2023. 4. 10. 21:39
무조건 따라하기/Spring Boot 기반 Security
동작 플로우 사용자가 인증을 요청하면 UsernamePasswordAuthenticationFilter 요청 받아 정보가 매칭되는지 AntPathRequestMatcher 에서 확인하게 된다. 일치하면 사용자가 입력한 username과 password를 Authentication 인증객체로 생성합니다. 그 객체를 AuthenticationManager가 받아 AuthenticationProvider에 위임해 인증을 하게된다. 인증을 성공하면 Authentication 객체를 만들어 리턴한다. AuthenticationManager는 Authentication을 필터에 반환한다. 그 필터는 인증객체를 SecurityContext에 저장하고 SuccessHandler에 의해 성공 이후 작업을 시작한다.
Spring Boot 기반으로 개발하는 Spring Security : Form Login 인증
2023. 4. 9. 22:24
무조건 따라하기/Spring Boot 기반 Security
Form 인증 package coid.security.springsecurity.security; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.Htt..
Spring Boot 기반으로 개발하는 Spring Security : 보안 기능 구현
2023. 4. 9. 18:15
무조건 따라하기/Spring Boot 기반 Security
WebSecurityConfigurerAdapter SpringSecurity가 초기화되면서 WebSecurityConfigurerAdapter.Class 를 호출하게된다. 클래스 내에 getHttp() 메소드를 살펴보면 HttpSecurity를 생성해주고 있으며, this.http = new HttpSecurity(this.objectPostProcessor, this.authenticationBuilder, sharedObjects); applyDefaultConfiguration() 메소드에서 11개 정도의 API를 호출하면서 설정초기화 작업을 해준다. private void applyDefaultConfiguration(HttpSecurity http) throws Exception { http...