사용자 정의 클래스를 작성하여 인증 처리하는 부분을 직접 작성하여 실행되도록 해보았습니다. 그런데 여전히 top메뉴의 메뉴들은 모두 다 보이고 있죠? 이 top메뉴에 보이는 부분을 좀 정리해보도록 하겠습니다. 

"Login" 메뉴는 인증을 하지 않은 모든 사용자가 볼 수 있어야 하며 , "관리자" 메뉴는 관리자 권한을 갖고 있는 사용자만 볼 수 있도록 해야 합니다.

모든 인증된 사용자는 프로필 사진과 "Logout"메뉴를 접근할 수 있어야겠죠?

 

Spring Security EL을 이용하여 직접 제어할 수 있습니다. EL은 우리가 설정 파일에서 권한을 정리할 때 이미 사용해 보았습니다.

 

jsp문서에서 spring security의 태그를 사용해야 하므로 taglib을 이용해서 등록해야 합니다.

<%@ taglib prefix="se" uri="http://www.springframework.org/security/tags" %>

 

spring security태그 <se:authorize> 엘리먼트를 이용해서 작업하며 access속성에 EL함수를 정의하여 작업합니다.

"Login"은 모든 사용자가 볼 수 있어야 하므로 access에 isAnonymous()를 정의합니다.

<se:authorize access="isAnonymous()">
	 <li style="margin-right: 20px; height: 70px">
     	<a href="/kimsaemERP/emp/login"><span
					class="glyphicon glyphicon-log-in"> </span>Login</a></li>
   </ul>
</se:authorize>

 

"관리자"는 관리자 권한을 갖고 있는 사용자만 접근할 수 있습니다. 지금은 "admin"권한만 접근할 수 있다고 가정하겠습니다. 따라서 access속성에 hasRole('admin')으로 정의합니다. 두 개 이상의 권한을 정의하는 경우 , 로 구분하여 작업합니다.

<se:authorize access="hasRole('admin')">
			<li><a href="/kimsaemERP/admin/index.do"> <span
					class="glyphicon glyphicon-user"></span>관리자
			</a></li>
</se:authorize>

 

프로필 사진과 "Logout" 메뉴는 인증된 사용자만 볼 수 있어야 합니다. 사용자이거나 관리자이거나 상관없이 인증을 받은 사용자만 보이도록 해야 하므로 access속성에 isAuthenticated()를 정의하면 인증된 사용자인 경우 볼 수 있습니다.

 <se:authorize access="isAuthenticated()">
	<li><a href="/kimsaemERP/emp/logout.do"><span
			class="glyphicon glyphicon-log-out"></span> Logout</a></li>
	</ul>
		
	<span class="navbar-form pull-right"> <img class="img-circle"
		style="width: 60px; height: 70px"
		src="/kimsaemERP/images/<se:authentication property="principal.profile_photo"/>" />
	</span>
</se:authorize>

 

실행을 해보도록 하겠습니다. 처음 접속하면 누구도 인증을 받지 않았기 때문에 "Login"만 보입니다.

 

일반 사용자 계정으로 접속하면 프로필 사진과 "Logout"메뉴만 보입니다.

 

관리자 계정으로 접속하면 프로필 사진, "관리자"메뉴 , "Logout" 메뉴가 보입니다.  

 

이렇게 어떤 권한을 갖고 있냐에 따라 메뉴 구성을 다르게 할 수 있습니다.

+ Recent posts