1️⃣ model 객체에 principalDetails.getUser() 정보 넘겨서 JSP 에서 사용하는 방법
로그인한 사용자의 정보를 앞단으로 전송하기 위해서 사용했던 방법은 model 객체에 addAttribute() 메서드를 통해 사용자의 객체를 넘겨주는 방법을 사용했었다.
@GetMapping("/user/{id}/update")
public String update(@PathVariable int id, @AuthenticationPrincipal PrincipalDetails principalDetails, Model model) {
model.addAttribute("principal", principalDetails.getUser());
return "user/update";
}
그리고 나서 JSP 에서 값을 꺼낼 때
<div class="item__input">
<input type="text" name="name" placeholder="이름"
value="${principal.name}" />
</div>
이런식으로 EL 표기법으로 꺼내서 다음과 같이 사용해야했다.
하지만 시큐리티 태그 라이브러리를 사용해서 조금더 간편하게 코드를 짤 수 있다.
2️⃣ 시큐리티 태그 라이브러리 활용하기
1. pom.xml 에 의존성 추가
<!-- 시큐리티 태그 라이브러리 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
</dependency>
2. header.jsp 에 시큐리티 설정 추가
이렇게 적으면 session 정보에 접근이 가능해진다.
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<sec:authorize access="isAuthenticated()">
<sec:authentication property="principal" var="principal"/>
</sec:authorize>
- var : 어디에 담을지 명시
- property="principal" : 인증된 사용자 정보라는 의미의 고정 키워드임. 따라서 수정 불가
3. principalDetails의 정보를 꺼내 사용하기
유저의 정보를 시큐리티 세션에서 꺼내서 사용해야할 때는 JSP 파일에 header includ 설정을 통해 쉽고 빠르게 가져올 수 있다.
<%@ include file="../layout/header.jsp"%>
이렇게 하면 어느 파일에서든 session 정보에 담겨있는 사용자의 정보에 접근이 가능하다. 즉 principalDetails에 접근이 가능한 것이다.
4. 각 페이지에서 user 정보 꺼내기
따라서 꺼내서 쓸 때는 principal.user.username 이런 식으로 꺼내 써야한다.
principal 에는 principalDetails 객체가 들어있는 것이기 때문이다.
${principal.user.username}
'👩💻 BackEnd > 🍃 스프링부트 [SpringBoot]' 카테고리의 다른 글
[JPA] 양방향 매핑 (0) | 2024.03.13 |
---|---|
[ Spring Boot / thymleaf ] spring mvc 2 검증 내용 정리 (0) | 2024.02.22 |
[SpringBoot] Spring Security - Session, 사용자의 정보 저장 (1) | 2024.01.08 |
[SpringBoot] @JsonProperty(access = Access.WRITE_ONLY) (0) | 2024.01.06 |
[SpringBoot] 21강 전처리와 후처리 (1) | 2024.01.04 |