📝 동시세션 제어 동일한 계정으로 들어왓을 때 동시 세션 제어 http.sessionManagement() // 세션 관리 기능 작동 .maximumSession(1) // 최대 허용 가능 세션 수, -1: 무제한 로그인 세션 허용 .maxSessionPreventsLogin(true) // 동시로그인 차단, false: 기존 세션 만료(default) .invalidSessionUrl("/invalid) // 세션이 유효하지 않을 때 이동 할 페이지 .expiredUrl("/expired") //세션 만료된 경우 이동 할 페이지 .sessionFixation().changeSessionId() // 인증 성공 시 세션은 그대로두고 세션아이디를 변경한다 📝 세션고정보호 인증에 성공할 때마다 새로운 세션을..
AnonymousAuthenticationFilter 익명사용자 인증 처리 필터 AnonymousAuthenticationFilter 는 null아 아니라 별도의 익명사용자를 만들어 처리한다. 인증객체를 세션에 저장하지 않는다 인증을 받게되면 세션에 user객체를 저장한다. 저장 후, 어떤 자원에 접근하려고하면 인증객체가 존재하는지 or null인지 체크하여 null이면 접근을 못하게하고 null이 아니면 인증된걸로 인식하여 접근하게한다 익명객체 존재여부 판단(익명객체는 보통 SecurityCotext에 있다) 존재한다. 그 다음필터 실행 존재하지 않는다. -> 인증객체 생성 (AnonymousAuthenticationToken) 테스트 @Configuration @EnableWebSecurity @Re..
📝 엔티티 매니저 팩토리와 엔티티 매니저 JPA가 제공하는 기능은 엔티티와 테이블을 매핑하는 설계부분과 매핑한 엔티티를 실제 사용하는 부분으로 나눌 수 있다. 엔티티 매니저는 엔티티를 저장하고 수정하고 삭제하고 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 즉, 엔티티를 관리하는 관리자다. 엔티티 매니저 팩토리는 한개 만 만들어서 애플리케이션 전체에서 공유하도록 설계되어 있다. 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하지만, 엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로 스레드 간에 절대 공유하면 안된다. 엔티티 매니저 트랜잭션을 시작할 때 커넥션을 획득한다. 📝 영속성 컨텍스트란? 영속성 컨텍스트(Persistence context)는 엔티티를 영구 저장하..
📝 Remember Me 인증 세션이 만료되고 웹 브라우저가 종료된 후에도 어플리케이션이 사용자를 기억하는 기능 Remember-Me 쿠키에 대한 Http 요청을 확인한 후 토큰기반 인증을 사용해 유효성을 검사 후 토큰이 검증되면 사용자가 로그인 된다. http.rememberMe() // remember 기능 작동 package kyh.security.basicsecurity; @Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig extends WebSecurityConfigurerAdapter { private final UserDetailsService userDetailsService; @Over..
📝 async , defer 이란 async HTML parsing과 병렬적으로 로드가 되는데, 스크랩트를 실행할 때는 파싱이 중단된다. defer HTML parsing과 병렬적으로 로드가 되지만, parsing이 다 끝나고나서 스크립트를 로드한다. 기본적으로 head안에 defer 옵션을 써서 사용하는게 효율적이고 안전하다. | head에 script 포함한 경우 | body 끝부분에 넣을 경우 | head + async | head + defer 참고 URL : https://www.youtube.com/watch?v=tJieVCgGzhs&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=2
| Logout 처리 http.logout() : 로그아웃 기능 작동 http.logout() // 로그아웃 처리 .logoutUrl("/logout") // 로그아웃 처리 URL .logoutSuccessUrl("/login") // 로그아웃 성공 후 이동페이지 .deleteCookies("JSESSIONID“, "remember-me") // 로그아웃 후 쿠키 삭제 .addLogoutHandler(logoutHandler()) // 로그아웃 핸들러 .logoutSuccessHandler(logoutSuccessHandler()) // 로그아웃 성공 후 핸들러 LogoutFilter POST방식으로 처리한다 AutPathRequestMatcher(/logout) 로 logout 링크와 일치하지 않으면 ..
정의 UsernamePasswordAuthenticationFilter는 login Form인증하는 필터이다. AbstractAuthenticationProcessingFilter는 UsernamePasswordAuthenticationFilter의 부모 클래스이다. AuthenticationManager는 인증객체를 받아서 AuthenticationProvider에 인증처리 위임 인증된 Authentication을 SecurityContext 객체에 저장한다. SecurityContext는 인증객체를 저장하는 보관소이다.
WebSecurityConfigurerAdapter WebSecurityConfigurerAdapter 을 상속받고 configure를 오버라이드하여 사용한다. WebSecurityConfigurerAdapter - configure protected void configure(HttpSecurity http) throws Exception { this.logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity)."); http.authorizeRequests((requests) -> { ((AuthorizedUrl)requests...
| Security Filter Spring Security의 동작은 사실상 Filter로 동작한다고 해도 무방하다. 각 Filter 들은 각자 다른 기능을 하고 있다. 이런 Filter들은 유기적으로 제외, 추가 및 순서를 정할 수 있다. 필터의 종류는 많지만 가장 많이 쓰이는 필터는 아래와 같다 SecurityContextPersistenceFilter BasicAuthenticationFilter CsrfFilter RememberMeAuthenticationFilter AnonymousAuthenticationFilter FilterSecurityInterceptor ExceptionTranslationFilter 1. SecurityContextPersistenceFilter 역할 Securit..
| ThreadLocal 대부분의 경우 요청 1개에 Thread 1개가 생성된다. 이때 ThreadLocal을 사용하면 Thread마다 고유한 공간을 만들 수 있고 그곳에 SecurityContext를 저장할 수 있다. 공유전략으로 3가지 방법이 있으며 기본적으로 ThreadLocal을 사용한다 MODE_THREADLOCAL, MODE_INHERITABLETHREADLOCAL, MODE_GLOBAL 대부분 ThreadLocal을 사용한다 Spring Security의 기본적인 Security Context 관리 전략은 ThreadLocal을 사용하는 ThreadLocalSecurityContextHolderStrategy이다. 변수는 지연변수, 전역변수 등 유효한 Scope을 가진다. 마찬가지로 Thre..
| Spring Security 내부구조 SecurityContextHolder -> SecurityContext -> Authentication -> Principal & GrantAuthority SecurityContextHolder SecurityContext를 제공하는 static 메소드(getContext)를 지원한다SecurityContext 접근 주체와 인증에 대한 정보를 담고 있는 Context이다. 즉, Authentication을 담고있다 Authentication Principal, GrantAuthority를 제공한다 인증이 이루어지면 해당 Authentication이 저장된다 Principal 유저에 대한 정보 대부분 Principal로 UserDetails를 반환한다 Grant..
| Spring Security 란? 스프링 생태계에서 인증과 인가를 최대한쉽고 유연하게 구현할 수 있도록 만들어진 framework 이다. Web 기반 Application에 보안적인 제한을 추가하기 위해 사용하는 Security Framework 중에 하나이다. Spring Security의 주요 목표는 Rest API endpoint, mvc url, 정적리소스와 같은 리소스들에 접근하려는 요청의 인증을 책임지는 것이다. Spring Security는 생태계와 호환성이 높고 커스텀이 매우 쉽다 https://docs.spring.io/spring-security/reference/index.html Spring Security :: Spring Security If you are ready to s..