thymeleaf-extras-springsecurity 동작 원리
thymeleaf-extras-springsecurity
게스트
상태에서는 "로그인"
메뉴바,
로그인
상태에서는 "장바구니", "구매내역", "로그아웃"
등의 메뉴바,
관리자
상태에서는 "상품등록", "상품관리"
등의 메뉴바만 출력되게끔 thymeleaf-extras-springsecurity 의 sec:authorize="isAuthenticated()" 와 같은 기능을 사용했지만 정확하게 어떤 원리로 이루어지는지 궁금해서 관련 내용과 디버깅을 통해서 정리해봄
sec:authorize="isAuthenticated()"
Spring Security 를 사용하기 전에는 request.session 객체를 이용하여 직접 로그인한 사용자의 정보를 계속해서 유지함. 하지만 Spring Security 를 사용하면 자동으로 로그인한 사용자의 정보를 유지하고, sec:authorize="isAuthenticated()"
와 같은 방법으로 현재 로그인한 사용자의 권한에 따라 다른 정보를 출력할 수 있음
Spring Security Context
사용자가 로그인 인증에 성공하면 Authentication
이라는 인터페이스 구현체가 만들어짐 (실제 사용되는 객체는 UsernamePasswordAuthenticationToken). 이 객체 안에는 현재 로그인한 사용자의 정보를 담고있는 Principal(User 객체), Credentials(PW), Authorities(Role)
객체가 존재함. 이 Authentication
객체를 담고 있는 것이 Security Context
이고, 또한 이를 담고 있는 것이 SecurityContextHolder
동작 원리
sec:authorize="isAuthenticated()"
의 동작원리는 위에서 살펴본 Spring Security Context
와 연관된 것 같아서 로그인한 사용자가 보내는 Reqeust 문을 테스트 환경에서 확인해봄
MockHttpServletRequest:
HTTP Method = GET
Request URI = /
Parameters = {}
Headers = []
Body = null
Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl
[Authentication=UsernamePasswordAuthenticationToken
[Principal=org.springframework.security.core.userdetails.User
[Username=admin, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN]],
Credentials=[PROTECTED], Authenticated=true, Details=null,
Granted Authorities=[ROLE_ADMIN]]]}
Session Attrs
에 Security Context 가 보내지는 것을 확인할 수 있었음. 즉, 로그인한 사용자가 요청을 보내면 해당 사용자의 Session 에 로그인한 사용자의 정보가 담긴 Security Context 가 담겨지고, 여기서 Authenticated=true, Authorities=[ROLE_ADMIN]
등의 정보를 이용하여 sec:authorize="isAuthenticated()"
기능이 동작하는 것 같음
Author And Source
이 문제에 관하여(thymeleaf-extras-springsecurity 동작 원리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@codren/thymeleaf-extras-springsecurity-동작-원리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)