Spring Security _ sec 태그의 표현식들

dwanGim·2022년 7월 6일
0

spring_basic

목록 보기
32/41

principal

DB와 연동된 security 로그인이 활성화되었다면 이제 jsp 파일 내부에

sec 태그를 활용해볼 수 있습니다.

springframework의 security tag 경로를 설정하고 sec라는 이름으로 임폴트했습니다.

이제 sec를 활용한 principal을 불러올 수 있어요.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 <h1>admin 로그인 성공</h1>
 <h2>다양한 페이지 정보</h2>
 	
 	
 	<!-- getter를 걸어놓아서 pricipal을 가져올 수 있어요 -->
 	<p>principal : <sec:authentication property="principal"/></p><hr/>
 	<p>MemberVO : <sec:authentication property="principal.member"/></p><hr/>
 	<p>principal로 꺼낸 ID : <sec:authentication property="principal.Username"/></p><hr/>
 	<p>사용자의 이름 : <sec:authentication property="principal.member.userName"/></p><hr/>
 	<p>사용자의 아이디 : <sec:authentication property="principal.member.userId"/></p><hr/>
 	<p>사용자의 권한 목록 : <sec:authentication property="principal.member.authList"/></p><hr/>

	<a href="/customLogout">로그아웃</a>
</body>
</html>

저희는 MemberVO를 가져오는 service에 @Getter를 걸어두었기 때문에

principal의 파라미터들을 불러올 수 있어요.

로그인 성공 페이지에 위와 같이 작성했더니

MemberMapper가 username에 따라 읽어온

pricipal의 정보를 모두 확인해볼 수 있었어요.

principal 의 성능이 session을 쓰는 것 같은데 session보다 훨씬 좋습니다.

시큐리티 표현식

principal 은 물론이고

sec 에는 좋은 표현식들이 많이 있습니다.

hasRole은 권한을 검사할 때

hasAnyRole은 원하는 권한 중 뭐든 통과시키고 싶을 떄

principal은 현재 접속 사용자의 정보

permitAll 권한이 없어도 모두 허용

denyAll은 테스트 코드 등에 접속하는 것을 막고 싶을 때

등등 위와 같이 사용할 수 있습니다.

아래에 한 번 적용해보겠습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>all 로그인 성공</h1>
	
	<sec:authorize access="isAnonymous()">
	<!-- 로그인 안 한 익명일 경우 -->
		<a href="/customLogin">로그인</a>
	</sec:authorize>
	
	<sec:authorize access="isAuthenticated()">
	<!-- 로그인(인증된) 사용자인 경우 -->	
		<a href="/customLogout">로그아웃</a>
	</sec:authorize>
	
	
	

</body>
</html>

모든 접속에 연결되도록 설정해둔 all.jsp를 수정했습니다.

sec 태그를 임폴트한 뒤에 access="isAnonymous()"를 건

sec태그를 생성하면 if문을 걸어서 session 체크를 하던 것과

동일한 효과를 볼 수 있습니다.

user29로 로그인된 상태로 /secu/all 에 접속했을 때

위와 같이 로그아웃 a태그가 표현되었습니다.

해당 페이지를 확인해보니 isAnonymous태그는 아예

보일 수가 없습니다. 활용할 여지가 정말 많은 태그인 것 같아요.

profile
배울 게 참 많네요.

0개의 댓글