강의노트
-
[스프링 시큐리티] ExceptionTranslationFilter강의노트/스프링 시큐리티 2020. 9. 12. 13:25
ExceptionTranslationFilter 필터의 경우 아래 2가지 예외를 발생시킨다. 인증 예외 (AuthenticationException) AuthenticationEntryPoint 호출 로그인 페이지 이동, 401 오류 코드 전달, SecurityContext 초기화 AuthenticationEntryPoint를 직접 구현해서 인증 예외 처리를 할 수도 있다. this.authenticationEntryPoint.commence(request, response, reason); 인증 예외가 발생하기 전의 요청 정보를 저장 RequestCache 인터페이스 : 사용자의 이전 요청 정보를 세션에 저장하고 이를 꺼내 오는 캐시 메커니즘 사용자가 다시 로그인하여 성공 후 이전 가고자 했던 리소스 ..
-
[스프링 시큐리티] 권한 설정과 표현식강의노트/스프링 시큐리티 2020. 9. 10. 21:27
권한 설정 선언적 방식 Url을 이용한 방식 protected void configure(HttpSecurity http) throws Exception { http .antMatchers("/users/**") .authorizeRequests() .antMatchers("/shop/login", "/shop/users/**").permitAll() .antMatchers("/shop/mypage").hasRole("ROLE_USER") .antMatchers("/shop/admin/pay").access("hasRole('ROLE_ADMIN')") .antMatchers("/shop/admin/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_SYS')") ..
-
[스프링 시큐리티] ConcurrentSessionFilter강의노트/스프링 시큐리티 2020. 9. 10. 19:53
동시 세션 제어 SessionManagementFilter에서 최대 세션 허용 개수를 초과할 경우 session.expireNow()를 통해서 세션을 만료 시킴 ConcurrentSessionFilter에서는 매 요청마다 현재 사용자의 세션 만료 여부를 체크(ConcurrentSessionControlAuthenticationStrategy) 만료 여부 체크는 session.isExpire() 함수를 통해서 체크하며 이는 SessionManagementFilter에서 설정한 값을 참조한다. 세션이 만료되었을 경우 즉시 만료 처리 session.isExpired() == true 로그아웃 처리 (doLogout()) 오류 페이지 응답 참조 : 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Sp..
-
[스프링 시큐리티] 세션 생성 정책강의노트/스프링 시큐리티 2020. 9. 10. 19:29
protected void configure(HttpSecurity http) throws Exception { http.sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.If_Required) }세션 정책 SessionCreationPolicy.Always : 스프링 시큐리티가 항상 세션 생성 SessionCreationPolicy.If_Required : 스프링 시큐리티가 필요 시 생성 (default) SessionCreationPolicy.Never : 스프링 시큐리티가 생성하지 않지만 이미 존재하면 사용 SessionCreationPolicy.Stateless : 스프링 시큐리티가 생성하지 않고 존재해도 사용하지 않음 세션을 사용..
-
[스프링 시큐리티] 세션 고정 보호강의노트/스프링 시큐리티 2020. 9. 10. 19:20
인증에 성공할 때 마다 세션 ID나 세션을 변경해서 발급해줌으로써 세션을 중간에서 가로채더라도 해당 세션이 유효하지 않게 하는 기능 protected void configure(HttpSecurity http) throws Exception { http.sessionManagement() .sessionFixation().changeSessionId() // changeSessionId : 새로운 세션 ID를 발급해서 전달(default) // none : 아무 동작 안함 // migrateSession : 새로운 세션을 생성해서 전달 (속성값 유지) // newSession : 새로운 세션 전달 (속성값 유지 안됨) } 참조 : 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring S..
-
[스프링 시큐리티] 동시 세션 제어강의노트/스프링 시큐리티 2020. 9. 10. 19:05
최대 세션 허용 개수 초과 (동일한 계정으로 생성되는 세션 개수) 시 제어 방법 이전 사용자의 세션 만료 (maxSessionsPreventsLogin : false) 신규 사용자의 인증 실패 (maxSessionsPreventsLogin : true) protected void configure(HttpSecurity http) throws Exception { http.sessionManagement() .maximumSessions(1) // 최대 허용 가능 세션 수, -1인 경우 무제한 세션 허용 .maxSessionsPreventsLogin(true) // 동시 로그인 차단, false인 경우 기존 세션 만료(default) .invalidSessionUrl("/invalid") // 세션이 유..
-
[스프링 시큐리티] AnonymousAuthenticationFilter강의노트/스프링 시큐리티 2020. 9. 10. 17:15
AnonymousAuthenticationFilter 사용에 따른 차이점 익명 사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용 AnonymousAuthenticationFilter 사용 X : Authentication Token이 null 유무 체크 AnonymousAuthenticationFilter 사용 O : 별도의 인증 객체(Anonymous Authentication Token)를 생성해서 사용한다. 인증 여부 체크를 isAnonymous()와 isAuthenticated() 함수를 통해서 구분한다. 인증 객체가 세션에 저장되지 않는다. AbstractSecurityInterceptor 인증 가장 마지막에 인증 여부를 확인하는 Filter AccessDeniedException이 발..
-
[스프링 시큐리티] RememberMeAuthenticationFilter강의노트/스프링 시큐리티 2020. 9. 10. 14:28
RememberMe 세션이 만료되거나 종료 된 후에도 서버에서 클라이언트의 인증 유무를 기억하는 기능 로그인 성공 시 서버에서 쿠키를 헤더에 실어서 발급하게 되고 클라이언트에서는 발급된 쿠키를 가지고 서버에 접근하게 된다. 서버에서는 클라이언트에서 전달 된 쿠키를 이용해서 유효성을 검증한다. 인증 성공(Remember-Me 쿠키 발급) 인증 실패(Remember-Me 쿠키 존재시 삭제) 로그 아웃(Remember-Me 쿠키 존재시 삭제) protected void configure(HttpSecurity http) throws Exception { http.rememberMe() .rememberMeParameter("remember") // 기본 파라미터명은 remember-me .tokenValidi..