뷰 페이지에 사용하는 시큐리티 태그
스프링 시큐리티는JSP 페이지에서 보안 정보에 접근하고 제약 조건을 적용하는
태그 라이브러리를 지원합니다.
이러한 태그 라이브러리를 사용하기 위해서 다음과 같이 선언해주어야 합니다.
<%@ tablib prefix="sec" uri="http://www.springframework.org/security/tags" %>
스프링 시큐리티 태그를 사용하기 위해서는 pom.xml 파일에 spring-security-taglibs.jar을 의존 라이브러리로 등록해줍니다.
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>5.6.3</version>
</dependency>
권한 태그 <sec:authorize>
태그 안의 내용을 평가할지 여부를 결정합니다.
<sec:authorize> 태그로 표현하여 사용합니다.
다음은 <sec:authorize> 태그 속성입니다.
속성 | 설명 |
access | 접근 권한 설정을 위한 정규 표현식 설정 |
url | 접근 권한이 설정된 사용자만 접근하도록 경로 설정 |
var | 접근 권한이 설정된 사용자를 변수로 재정의하여 설정 |
다음은 <sec:authorize> 태그 사용 예시입니다.
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Example02Controller {
@RequestMapping("/exam02")
public String requestMethod(Model model) {
return "webpage08_02";
}
@RequestMapping("/admin/tag")
public String requestMethod2(Model model) {
return "webpage08_02";
}
}
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<html>
<head>
<title>Security</title>
</head>
<body>
<h2>스프링 시큐리티 태그</h2>
<sec:authorize access="hasRole('ROLE_MANAGER')" var="isAdmin">
<p><h3>매니저 권한 화면입니다.</h3>
</sec:authorize>
<c:choose>
<c:when test="${isAdmin }">
<p>ROLE_MANAGER 권한 로그인 중입니다.
<p><a href="<c:url value='/exam02'/>">[웹 요청 URL /exam02로 이동]</a>
</c:when>
<c:otherwise>
<p>로그인 중이 아닙니다.
<p><a href="<c:url value='/manager/tag'/>">[웹 요청 URL /manager/tag로 이동]</a>
</c:otherwise>
</c:choose>
</body>
</html>
톰캣 서버 실행 후 'http://localhost/chap08/exam02'를 입력하면 다음과 같이 출력됩니다.
로그인 화면에서 매니저 권한을 얻고 다시 실행하게 되면
다음과 같이 권한에 따라 다른 화면이 출력 가능합니다.
인증 태그 <sec:authentication>
시큐리티 설정 파일에 저장된 현재 authentication 객체에 대한 접근을 허용합니다.
<security:authentication>으로 표현하여 사용합니다.
JSP 페이지에서 property 속성을 사용해서 현재 authentication 객체에 직접 접근이 가능합니다.
다음은 <security:authentication> 태그 속성입니다.
속성 | 설명 |
property | 접근 권한이 설정된 현재 authentication 객체 이름 |
scope | 접근 권한이 설정된 영역 |
var | 접근 권한이 설정된 사용자를 변수로 재정의하여 설정 |
다은은 인증 태그를 설정한 예시입니다.
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Example03Controller {
@RequestMapping("/exam03")
public String requestMethod(Model model) {
return "webpage08_03";
}
@RequestMapping("/admin/tag")
public String requestMethod2(Model model) {
return "webpage08_03";
}
}
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<html>
<head>
<title>Security</title>
</head>
<body>
<h2>스프링 시큐리티 태그 예</h2>
<sec:authorize access="hasRole('ROLE_ADMIN')" var="isAdmin">
<p><h3>관리자 권한 화면입니다.</h3>
</sec:authorize>
<c:choose>
<c:when test="${isAdmin }">
<p>로그인 중입니다.
<p>비밀번호: <sec:authentication property="principal.password" />
<sec:authentication property="authorities" var="roles" scope="page" />
<p>권한 :
<ul>
<c:forEach var="role" items="${roles }">
<li>${role }</li>
</c:forEach>
</ul>
<p>이름 : <sec:authentication property="principal.username" />
<p><a href="<c:url value='/exam03'/>">[웹 요청 URL /exam03로 이동]</a>
</c:when>
<c:otherwise>
<p>로그인이 아닙니다.
<p><a href="<c:url value='/admin/tag'/>">[웹 요청 URL /admin/tag로 이동]</a>
</c:otherwise>
</c:choose>
</body>
</html>
톰캣 서버 실행 후 'http://localhost/chap08/exam03'을 입력합니다.
관리자 권한이 없어서 다음과 같이 출력됩니다.
'http://localhost/chap08/login'입력 후 관리자 아이디로 로그인 한 후,
다시 들어가보면
관리자 권한이 있는 아이디기 때문에 다음과 같은 화면이 출력됩니다.
'SPRING' 카테고리의 다른 글
[SPRING]#24 도서 쇼핑몰 구현 (스프링 시큐리티6) (0) | 2024.01.10 |
---|---|
[SPRING]#23 도서 쇼핑몰 구현 (스프링 시큐리티5) (0) | 2024.01.10 |
[SPRING]#21 도서 쇼핑몰 구현 (스프링 시큐리티3) (0) | 2024.01.10 |
[SPRING]#20 도서 쇼핑몰 구현 (스프링 시큐리티2) (0) | 2024.01.09 |
[SPRING]#19 도서 쇼핑몰 구현 (스프링 시큐리티1) (0) | 2024.01.09 |