티스토리 뷰

728x90
반응형

 

 

 

 

 

 

예전에 spring security로 로그인, 사용자권한별 페이지접속에 대해서 글을 적은적이 있는데요.

이번에는 로그아웃 기능을 만들고, 아래와 같이 3가지 기능을 추가해보려고 합니다.

 

1. 로그아웃버튼을 누르면 로그아웃

2. 사용자가 특정시간동안 아무동작이 없으면 세션종료되며 로그아웃

3. 로그아웃되면 자동으로 로그인페이지로 이동

 

spring security 로그인 + 사용자권한별 접속에 대한 내용은 아래 게시물을 확인해주세요!

https://domdom.tistory.com/656

 

[springboot] spring security로 DB 사용자권한별 페이지접속제한하기

먼저, 로그인 페이지를 만들어줍니다. 컨트롤러에 로그인 페이지를 생성해주세요. // Controller @RequestMapping("/login") public String login() throws Exception { return "login"; } 연결된 로그인 html파일에는 다음과

domdom.tistory.com

 

 

 

먼저 작성해놨던 SecirutyConfig 파일을 열어서 로그아웃에 대한 내용을 작성합니다.

로그아웃 요청 시 URL은 /logout으로,

로그아웃 성공시 /login으로 이동하도록 합니다.

그리고 유효하지 않은 세션의 경우 /login 페이지로 이동하도록 설정합니다.

 http
 	....
 	.logout()
        .logoutUrl("/logout") // 로그아웃 요청 URL 설정, 기본값은 "/logout"
        .logoutSuccessUrl("/login") // 로그아웃 성공 시 이동할 URL
        .invalidateHttpSession(true) // HTTP 세션 무효화 여부
        .deleteCookies("JSESSIONID") // 로그아웃 시 삭제할 쿠키 설정, 여러 개일 경우 여러 번 호출
        .permitAll(); // 로그아웃 페이지 접근 권한 설정
        
...
http.sessionManagement()
    .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) // 로그인과 같은 사용자활동으로 세션이 생성되지 않았다면 세션타임아웃이 발생하지 않음
    .invalidSessionUrl("/login") // 유효하지 않은 세션 -> /login 페이지로 이동
    .sessionFixation().none() // 세션 고정 방지 설정
    .maximumSessions(1).expiredUrl("/login"); // 사용자별 세션은 1개만 사용가능

 

 

 

먼저, 로그아웃 버튼을 만들고, 버튼을 클릭하면 로그아웃되도록 해봅니다.

securityConfig 파일에서 로그아웃이 되면 자동으로 로그인페이지로 이동되도록 설정했기 때문에

로그아웃 페이지를 만들필요 없이, 로그아웃 버튼을 누르면 로그인 페이지로 이동하게 됩니다.

 

<form id="logoutForm" action="/logout" method="post">
    <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
    <button type="submit">로그아웃</button>
</form>

 

 

 

이제 자동로그아웃 기능을 만들어봅니다!

 application.properties에 동작이 없을 경우 세션을 종료할 시간을 설정해줍니다.

뒤에 s를 붙이면 초단위, m을 붙이면 분단위, d를 붙이면 일단위 입니다.

이렇게하면 페이지에서 아무 동작 없이 60초가 지나면, 세션이 종료되며 다른 기능을 수행하려고 할 때 로그인페이지로 이동됩니다. 

 

# 세션타임아웃 : 60초
server.servlet.session.timeout=60s

 

 

 

끝!

 

 

728x90
반응형
댓글