sm 기술 블로그

[스프링 시큐리티] 로그아웃 본문

스프링부트

[스프링 시큐리티] 로그아웃

sm_hope 2022. 7. 23. 10:39

로그인, 로그아웃 링크가 상황에 맞게 보이게 하기.

                    <a class="nav-link" sec:authorize="isAnonymous()" th:href="@{/user/login}">로그인</a>
                    <a class="nav-link" sec:authorize="isAuthenticated()" th:href="@{/user/logout}">로그아웃</a>

sec:authorize는 권한에 따른 조건문으로 권한 if문으로 생각하자.
isAnonymous()는 익명의 사용자 즉, 로그인이 되지 않았다면 로그인 표시를 한다.
isAuthenticated()는 인증된 사용자 즉, 로그인이 되어 있다면 로그아웃을 표시한다.

SecurityConfig

(... 생략 ...)
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
(... 생략 ...)

@RequiredArgsConstructor
@Configuration
@EnableWebSecurity
public class SecurityConfig  {

    private final UserSecurityService userSecurityService;

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
 	(... 생략 ...)
            .and()
                .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/user/logout"))
                .logoutSuccessUrl("/")
                .invalidateHttpSession(true)
            ;
        return http.build();
    }

    (... 생략 ...)
}

.logout()은 로그아웃을 하겠다고 선언한것이다.
.logoutRequestMatcher(new AntPathRequestMatcher("/user/logout"))는 로그아웃 페이지를 /user/logout로 설정한 것이다.
.logoutSuccessUrl("/") 로그아웃이 성공한다면 루트(list)페이지로 이동한다.
.invalidateHttpSession(true) 생성된 사용자 세션을 삭제한다. (세션을 통해 로그인여부를 기억함.)

Comments