본 게시물은 스스로의 공부를 위한 글입니다. 잘못된 내용이 있으면 댓글로 알려주세요! 사용자가 인증이 필요한 자원이나, 특정한 권한(인가)가 필요한 자원에 접근하려 할 때, 인증 또는 인가에 실패하면 ExceptionTranslationFilter가 이를 처리해준다. 크게 하는 일은 2가지 이다. 1. AuthenticationException(인증 예외 처리) 인증에 실패했을 시 인증 예외 처리를 호출한다. 여기서도 2가지 일을 진행한다. AuthenticationEntryPoint 호출: 로그인 페이지 이동, 401 오류 코드 전달 등 인증 예외가 발생하기 전의 요청 정보를 저장 : 세션에 정보를 넣어놨다가, 로그인 성공 시 원래 접속하려던 url로 리다이렉트 등에 쓰인다. SavedRequest : 사용자가 요청했던 request 파라미터 값들, 그 당시의 헤더값들 등이 저장 RequestCache : 사용자의 이전 요청 정보
본 게시물은 스스로의 공부를 위한 글입니다. 잘못된 내용이 있으면 댓글로 알려주세요! 아래에서 알아볼 내용은 3가지이다. 동시 세션 제어 세션 고정 보호 스프링 시큐리티 세션 정책 설정 1. 동시 세션 제어 동일한 계정으로 로그인 되면 어떤 일이 벌어질까? 스프링 시큐리티에서 로그인 정보에 대한 인증이 끝나면 세션에 인증 객체를 만들어 저장한다. 이때 동일한 계정으로 로그인 했다면 똑같은 회원에 대해 서로 다른 세션이 여러개 만들어질 것이다. 스프링 시큐리티 설정을 통해 이를 제어할 수 있다. 최대 세션 허용 개수를 설정할 수 있고, 허용 개수를 넘어갔을 경우의 정책도 설정할 수 있다. 만약 최대 세션 허용 개수를 초과했다 가정하자. 두 가지 방법이 있다. 이전 사용자의 세션을 만료시킨다.  사용자가 로그인 페이지를 만들때 여기를 주의해야 한다. 보통 checkbox로 만들텐데, 이때 name을 여기서 설정한 값과 동일하게 해줘야 한다. tokenValiditySeconds 초 단위로 remember-me 토큰의 유효시간을 설정할 수 있다. .alwaysRemember 사용자가 이 기능을 사용한다고 체크하지 않아도 자동으로 사용하게 하는 기능이다. userDetailsService 이 기능
본 게시물은 스스로의 공부를 위한 글입니다. 잘못된 내용이 있으면 댓글로 알려주세요! 스프링 시큐리티가 제공하는 Logout 기능은 세션 무효화, 인증토큰 삭제, 쿠키 정보 삭제, 로그인 페이지로 리다이렉트 등이 있다. 아래 설정 코드를 보자. logoutUrl로 로그아웃 처리 Url을 커스텀해줄 수 있다. 기본 주소는 /logout이며 원칙적으로는 post방식으로 요청해야 로그아웃된다. .logoutSuccessUrl 로그아웃 정상 처리 후 리다이렉트 주소를 설정할 수 있다. deleteCookies 로그아웃 정상 처리 후 쿠키 삭제를 설정해줄 수 있다. 이때 JSESSIONID가 로그인 토큰이며 remember-me는 다음 게시물에서 배울 토큰이다. addLogoutHandler, .logoutSuccesshandler로 여러 핸들러를 등록할 수 있다. 기본으로 제공된 로그인 페이지의 소스는 다음과 같다. ![](
본 게시물은 스스로의 공부를 위한 글입니다. 잘못된 내용이 있으면 댓글로 알려주세요! Form login이 무엇인지 알고 있다는 전제를 바탕으로 스프링 시큐리티 설정 부분을 설명한 게시물입니다. 먼저 설정 코드를 보자. .loginPage 로그인 페이지 주소를 설정할 수 있다. 사용자가 로그인 페이지를 직접 만들거나 로그인 주소를 변경할 때 사용된다. 기본 주소는 /login이다. .defaultSuccessUrl: 로그인 성공 후 자동으로 이동할 페이지이다. 로그인 성공 후 redirect될 페이지를 정하는 것은 이 메소드 뿐이 아니다. .successHandler에서 send.redirect해줄 수도 있고, requestCache에서 직전에 접속하려 했던 url을 get해서 그 페이지로 이동하기도 한다. 그 중 .defaultSuccessUrl은 최후순위를 가지게 된다. 만약 이걸로 설정한 url로 무조건 리다이렉트가게 하