강의노트/스프링 시큐리티
-
[스프링 시큐리티] 필터 초기화와 다중 보안 설정강의노트/스프링 시큐리티 2020. 9. 14. 12:38
다중 설정 클래스 설정 클래스 별로 보안 기능이 각각 작동한다. 설정 클래스 별로 RequestMatcher를 설정한다. 설정 클래스 별로 필터가 생성된다. 다중 설정 클래스를 설정 할 경우 @Order 어노테이션을 통해서 어떤 보안 기능을 체크할지 설정해주어야 한다. (index 0부터 시작) Filter들과 RequestMatcher를 가진 SecurityFilterChain 객체가 각각의 보안 설정에 따라 생성되어진다. 각각의 생성된 SecurityFilterChain 객체들은 FilterChainProxy 빈에서 SecurityFilterChains 리스트 멤버 변수로 관리된다. 요청 처리 과정 요청이 들어오면 FilterChainProxy에서는 SecurityFilterChains 리스트에 있는..
-
[스프링 시큐리티] DelegatingFilterProxy & FilterChainProxy강의노트/스프링 시큐리티 2020. 9. 13. 00:25
ServletFilter WAS에서 톰캣이 올라가서 WAS에서 실행되는 필터이다. 요청을 받아서 Servlet에 전달하고, Servlet에서 응답을 받아서 클라이언트에 전달하는 역활을 수행한다. Servlet Container에서 생성되고 실행이 된다. 서블릿 필터는 스프링에서 정의된 빈을 주입해서 사용할 수 없다. Why? 서로 실행되는 컨테이너가 다르다. 인증/인가 처리는 스프링 컨테이너에 생성된 Filter를 통해서 처리된다. 실질적인 서블릿 필터가 DelegatingFilterProxy이다. // web.xml springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain ..
-
[스프링 시큐리티] CsrfFilter강의노트/스프링 시큐리티 2020. 9. 12. 23:43
CSRF (사이트 간 요청 위조) 웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹 페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법을 의미한다. XSS와 SQL Injection과 비슷한데 XSS가 사용자가 특정 사이트를 신뢰한다는 점을 공격하는 거라면 CSRF는 특정 사이트가 사용자를 신뢰한다는 점을 공격하는 것이다. XSS : 악성 코드가 클라이언트에서 발생 CSRF : 악성 코드가 서버에서 발생 CsrfFilter 서버는 모든 요청에 대해서 랜덤으로 생성된 토큰을 클라이언트에 전달하고, 클라이언트는 매 요청 시마다 해당 토큰을 HTTP 파라미터 또는 헤더로 서버에 전달한다. 요청 시 전달 된 토큰 값과 서버에 저..
-
[스프링 시큐리티] 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..