본문 바로가기
JSP/JSP기초

JSP(security) 프로그래밍적 시큐리티 처리 방법

by 미눅스[멘토] 2023. 7. 10.
728x90
메소드 형식 설명
getRemoteuser() String 사용자의 인증 상태를 반환한다.
getAuthType() String 서블릿을 보호하는데 사용되는 인증 방식의 이름을 반환한다.
isUserInRole(java.lang.String role) boolean 현재 인증된 사용자에게 설정된 역할이 있는지 확인한다. 설정된 경우  true를 반환하고 그렇지 않은 경우 false를 반환한다.
getProtocol() String 웹 브라우저의 요청 프로토콜을 가져온다.
isSecure() boolean 웹 브라우저에서  https 요청으로 request가 들어왓는지 확인한다. 웹 브라우저에서 https로 접근하면 true를 반환하고,http로 접근하면 false를 반환한다.
getUserPrinciple() Principle 현재 인증한 사용자의 이름을 포함하여 java.security.Principle 객체를 반환한다.

 

 

 

 

 

Servers패키지에 tomcat-users.xml파일 들어가서

 

user: 사용자와

role : 권한을 설정한다.

 

web.xml파일을 생성해서 아래 코드를 작성한다.

 

 

 

<security-role>

                                       <role-name>tomcat</role-name>

</security-role>

사용할 권한을 선언해준다

 

 

url-pattern  파일을 지정하고

role-name에 위에 선언한 권한을 가져온다.= tomcat

그리고 url주소에 맞는 파일 생성

 

 

전체코드

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>JSPBook</display-name>
  <!-- 시큐리티 역할(role) 설정 -->
  <security-role>
  	<role-name>tomcat</role-name>
  </security-role>
  <security-role>
  	<role-name>role1</role-name>
  </security-role>
  <security-role>
  	<role-name>admin</role-name>
  </security-role>
  <!-- 시큐리티의 제약 사항(constraint)을 설정 -->
  <!-- JSPBook이라는 웹 어플리케이션에서 해당 URL을 GET방식으로 요청하려면
  		role1이라는 권한이 있어야 함(both, role1 아이디)
   -->
  <security-constraint>
  	<web-resource-collection>
  		<web-resource-name>JSPBook</web-resource-name>
  		<url-pattern>/ch10/security01.jsp</url-pattern>
  		<http-method>GET</http-method>
  	</web-resource-collection>
  	<auth-constraint>
  		<description></description>
  		<!-- /ch10/security01.jsp가려면 role1이라는 계정이 있어야한다.라는 뜻 -->
  		<role-name>role1</role-name>
  	</auth-constraint>
  </security-constraint>
  <!-- 접근제한 URL : /ch10/security02.jsp
  	   tomcat 권한을 가진 사용자만 접근 가능
   -->
  <security-constraint>
  	<web-resource-collection>
  		<web-resource-name>JSPBook</web-resource-name>
  		<url-pattern>/ch10/security02.jsp</url-pattern>
  		<http-method>GET</http-method>
  	</web-resource-collection>
  	<auth-constraint>
  		<description></description>
  		<!-- /ch10/security02.jsp가려면 tomcat이라는 계정이 있어야한다.라는 뜻 -->
  		<role-name>tomcat</role-name>
  	</auth-constraint>
  </security-constraint>
  <!-- 접근 제한 URL : /addProduct.jsp
  	     허용권한    : admin
  	     허용user : admin
   -->
  
  <security-constraint>
  	<web-resource-collection>
  		<web-resource-name>JSPBook</web-resource-name>
  		<url-pattern>/addProduct.jsp</url-pattern>
  		<http-method>GET</http-method>
  	</web-resource-collection>
  	<auth-constraint>
  		<description></description>
  		<!-- /ch10/security02.jsp가려면 tomcat이라는 계정이 있어야한다.라는 뜻 -->
  		<role-name>admin</role-name>
  	</auth-constraint>
  </security-constraint>
  

  <security-constraint>
  	<web-resource-collection>
  		<web-resource-name>JSPBook</web-resource-name>
  		<url-pattern>/product.jsp</url-pattern>
  		<http-method>GET</http-method>
  	</web-resource-collection>
  	<auth-constraint>
  		<description></description>
  		<!-- /ch10/security02.jsp가려면 tomcat이라는 계정이 있어야한다.라는 뜻 -->
  		<role-name>admin</role-name>
  	</auth-constraint>
  </security-constraint>
  
  
  <!-- 인증(authentication)-로그인/로그아웃 처리를 위한 페이지를 설정 -->
  <login-config>
<!--   	<auth-method>BASIC</auth-method> -->
	<auth-method>FORM</auth-method>
	<form-login-config>
		<!-- 로그인 URL 설정 -->
		<form-login-page>/login.jsp</form-login-page>
		<!-- 인증(로그인) 실패시 실패 페이지 성정 -->
		<form-error-page>/login_failed.jsp</form-error-page>
	</form-login-config>
  </login-config>
</web-app>

 

 

작성했으면 위에서 사용할 파일을 만든다

 

security02파일.jsp
파일 코드 작성

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	<h3>프로그래밍적 시큐리티 처리</h3>
	<p>
		웹 어플리케이션(JSPBook 프로젝트)의 보안을 위해 코드를 작성하여
		사용자의 권한 부여를 처리하는 방식
	</p>
	<p>
		선언적 시큐리티(tomcat-users.xml : 권한(role)들 + 사용자(user)들
		web.xml : 제한 URL, 권한, 로그인/ 로그아웃 페이지
		)의 보안으로 충분하지 않을 때 request 내장 객체의 메소드를 사용하여 사용자를 승인
	</p>	
	<p>사용자 ID : <%=request.getRemoteUser() %></p>
	<!-- .getAuthType() : BASIC / FORM -->
	<p>인증 방법 : <%=request.getAuthType() %></p>
	<p>
		인증한 사용자가 tomcat role에 속하는지?
		<%=request.isUserInRole("tomcat") %>
		<%
// 			if(request.isUserInRole("tomcat")){
// 				out.print("<a href='/ch06.addProduct.jsp'> 상품 등록</a>");
// 			}
		%>
	</p>
	<p>
		인증한 사용자가 role1에 속하는지?
		<%=request.isUserInRole("role1") %>
	</p>
</body>
</html>

 

결과