👩‍💻 BackEnd/🍃 스프링부트 [SpringBoot]

[JSP / Spring Boot] 시큐리티 태그 라이브러리

minhe2810 2024. 2. 21. 21:50

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}