본문 바로가기

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

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

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}