사용자 정의 클래스를 작성하여 인증 처리하는 부분을 직접 작성하여 실행되도록 해보았습니다. 그런데 여전히 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" 메뉴가 보입니다.
이렇게 어떤 권한을 갖고 있냐에 따라 메뉴 구성을 다르게 할 수 있습니다.
'보안 > Spring Security' 카테고리의 다른 글
메뉴 처리하기 - 사원의 job그룹에 따라 다른 메뉴 보여주기 (0) | 2019.09.15 |
---|---|
로그인 성공 했을 경우 처리할 일 - AuthenticationSuccessHandler (2) | 2019.09.15 |
AuthenticationProvider커스트마이징하기 (0) | 2019.09.15 |
admin계정에서 모든 사원의 비밀번호를 암호화하기 (0) | 2019.09.15 |
password암호화 - ShaPasswordEncoder(회원가입 수정) (0) | 2019.09.13 |