본문 바로가기

BackEnd/JSP

[JSP 웹 프로그래밍] 시큐리티 1 (선언적 시큐리티 처리)

728x90
반응형

1. 시큐리티

   ▷ 허가된 사용자만이 특정 웹 페이지에 접근할 수 있도록 제한하는 보안 기능

   ▷ 사용자가 권한이 없는 데이터에 접근하는 것을 막거나 웹 공격자가 전송데이터를 중간에 가로채는 것을 방지하는 등 중요한 역할

   ▷ 인증(authentication)

      ▶ 사용자가 웹 브라우저를 사용하여 웹 페이지에 접근할 때 JSP 컨테이너는 요청된 페이지에 보안 제약이 있는지 확인하고 사용자에게 사용자의 이름과 암호를 확인하여 수행

   ▷ 권한 부여(authorization)

      ▶ 특정 사용자가 해당 페이지에 접근할 수 있는지 확인하여 승인

 

◎ 시큐리티 처리 방법

 

◎ 웹 서버에 역할과 사용자 구성하기

   ▷ /설치된 톰캣의 루트/conf/ 폴더 내의 tomcat-users.xml 파일

      ▶ 2개의 역할(tomcat, role1)을 가지고 3개의 사용자(tomcat, both, role1)이 서로 다른 역할에 매핑



◎ 기존 인증 정보와 새로운 인증 정보를 추가하는 예시


admin이라는 사용자가 추가되었습니다.

 

2. 선언적 시큐리티 처리

   ▷ 웹 애플리케이션 배포 설명자 web.xml 파일에 보안 구성을 작성하여 수행하는 방식

   ▷ 웹 애플리케이션의 보안을 달성하기 위해 별도의 코드를 작성할 필요 없이 web.xml 파일에 보안 구성을 작성하여 사용자가 웹 페이지에 접근할 수 있게함.

      ▶ web.xml 파일에는 보안 역할, 보안 제약 사항, 인증 처리 등을 설정하여 보안을 구성

 

◎ 시큐리티 역할 설정하기

   ▷ <security-role>은 웹 애플리케이션에 사용하는 역할을 나열하는 요소

   ▷ web.xml 파일에 구성

 

◎ 시큐리티 제약 사항 설정하기

   ▷ 사용자의 요청 URL에 대한 접근 권한을 정의하는데 사용

   ▷ web.xml 파일에 접근 권한 내용을 구성

 

 

   ▷ <web-resource-collection> 요소

      ▶ 웹 자원에 대한 접근을 설정하는 요소

      ▶ <url-pattern>, <http-method>, <webresource-name> 등의 하위 요소로 구성

 

 

 

◎ <auth-constraint> 요소

   ▷ 권한이 부여된 사용자만이 웹 자원에 접근할 수 있도록 이름을 설정하는 요소로 형식은 다음과 같음

      ▶ <auth-constraint> 요소에는 <web-resource-collection> 요소의 <urlpattern>과 <http-method>에 설정된 경로에 접근할 수 있는 권한이 부여된 사용자의 이름을 지정

      ▶ <auth-constraint> 요소를 생략하면 웹 서버는 사용자 인증을 요구하지 않고 사용자의 요청을 승인

 

 

 

◎ 시큐리티 제약 사항 설정하기

   ▷ <user-data-constarint> 요소

      ▶ 클라이언트와 서버 간에 데이터를 전송할 때 데이터를 보호하는 방법을 설정하는 요소

 

 

◎ 시큐리티 인증 설정하기

   ▷ 인증 처리를 위한 로그인 페이지나 오류 페이지를 호출하는 데 사용

   ▷ web.xml 파일에 인증 관련 내용을 구성

 

   ▷ <auth-method> 요소

      ▶ 웹 애플리케이션의 인증 처리 기법을 설정하는 요소

      ▶ 인증 처리 기법은 BASIC, DIGEST, FORM, CLIENT-CERT 등으로 이 중 하나를 <auth-method> 요소에 설정

 

 

   ▷ <realm-name> 요소

      ▶ 기본 인증의 영역 이름을 설정하는 요소

   ▷ <realm-name> 요소에 설정된 영역 이름은 대개 웹 브라우저의 로그인 대화 상자에 표시

   ▷ <realm-name> 요소는 FORM 기반 인증이나 다른 인증 방법에 필요하지 않기때문에 아무런 영향을 미치지 않지만,

        <login-config> 요소에 대한 설명 속성이 없으므로 데이터를 문서화하는 데 일반적으로 사용

 

   ▷ <form-login-config> 요소

      ▶ 인증 처리를 위한 로그인 및 오류 페이지를 설정하는 요소

      ▶ <auth-method> 요소가 FORM 기반 인증 처리 기법으로 설정되었을 때 사용

      ▶ <form-loginpage>, <form-error-page> 등의 하위 요소로 구성됨

      ▶ 로그인 및 오류 페이지의 경로는 웹 애플리케이션 이름(이클립스에서 프로젝트 이름에 해당됨)을 기준으로 설정

 

 

◎ 기본 인증 처리 방법으로 보안 처리하기 예제(로그인 창 나타남)

1. Servers/Tomcat v9.0 Server at localhost-config/tomcat-users.xml
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat1234" roles="tomcat"/>
  <user username="both" password="both1234" roles="tomcat,role1"/>
  <user username="role1" password="role1234" roles="role1"/>

	<role rolename = "manager" />
	<user username = "admin" password="admin1234" roles="manager" />​


기존의 내용에 위의 코드를 추가합니다.


2. web.xml 파일 생성
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
	<security-role>
		<role-name>role1</role-name>
<!-- 		<role-name>tomcat</role-name>		 -->
	</security-role>
	<security-constraint>
		<web-resource-collection>
			<web-resource-name>JSP03036</web-resource-name>
			<url-pattern>/ch10/security01.jsp</url-pattern>
			<http-method>GET</http-method>
		</web-resource-collection>
		<auth-constraint>
			<description></description>
			<role-name>role1</role-name>
<!-- 			<role-name>tomcat</role-name> -->
		</auth-constraint>
	</security-constraint>
	<login-config>
		<auth-method>FORM</auth-method>
		<form-login-config>
			<form-login-page>/ch10/login.jsp</form-login-page>
			<form-error-page>/ch10/login_failed.jsp</form-error-page>
		</form-login-config>
	</login-config>
</web-app>


role1만 지정이 되어있어서 role1, both만 로그인이 되었습니다.
하지만 주석처리되어 있는 tomcat 부분을 추가하면 앞에서 지정했던 tomcat도 로그인 됩니다.

3. login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Security</title>
</head>
<body>
	<form name="loginForm" action="j_security_check" method="post">
		<p> 사용자명 : <input type="text" name="j_username">	
		<p> 비밀번호 : <input type="password" name="j_password">	
		<p> <input type="submit" value="전송">	
	</form>
</body>
</html>


4. login_failed.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Security</title>
</head>
<body>
	<p> 인증 실패했습니다.
</body>
</html>


5. security01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Security</title>
</head>
<body>
	<p>인증 성공했습니다
</body>
</html>

 

security 페이지에서 창을 실행하면 아래와 같은 로그인 창이 나타납니다.


role1, both는 로그인이 됩니다.
web.xml에서 tomcat 주석부분을 해제하면 tomcat도 로그인이 됩니다!

만약 password가 틀리면 인증 실패 화면이, 맞으면 인증 성공 화면이 나타납니다.

 

시큐리티는 허가된 사용자만이 특정 웹 페이지에 접근할 수 있도록 제한하는 보안 기능입니다.

 

즉 로그인을 할 때 지정한 사용자만 사용가능하도록 제한한다는 것이죠!

 

tomcat server에서 아이디랑 패스워드를 별도로 지정하고 web.xml 파일에서 해당 조건에 맞는 것만 원하는 결과를 출력할 수 있도록 만들어줄 수 있어요!

 

보안 기능이기 때문에 중요하게 사용될 것 같아요!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형