[JSP] 시큐리티
시큐리티
- 허가된 사용자만이 접근할 수 있도록 제한하는 보안 기능
프로세스
- 사용자가 웹 페이지에 접근
- JSP 컨테이너(Tomcat)는 요청된 페이지에 보안 제약(Constraints)이 있는지 확인
- 사용자에게 인증(authentication)을 요청
- 권한 부여(authorization) : JSP 컨테이너는 사용자가 해당 페이지에 접근할 수 있는지 확인. 승인
역할
- 사용자가 권한이 없는 데이터에 접근하는 것을 막음
- 스니핑(sniffing) : 웹 공격자가 전송 데이터를 중간에 가로채는 것 방지
그래서 시큐리티란?
허가된 사용자만이 특정 웹 페이지에 접근할 수 있도록 제한하는 보안 기능
사용자가 권한이 없는 데이터에 접근하는 것을 막아줌
웹 공격자가 전송 데이터를 중간에 가로채는 것을 방지(스니핑 방지)
선언적 시큐리티
web.xml 파일(웹 애플리케이션(JSPBook) 배포 설명자)에 보안 구성을 작성하여 수행
보안 역할(role), 보안 제약 사항(constraint), 인증 처리(login.jsp, login-failed.jsp) 설정
-
tomcat-users.xml에
추가해준다
-
JSPBook에 있는 web.xml에 추가해준다.
1) BASIC 인증 처리 기법
<security-constraint>
<web-resource-collection>
<!-- 프로젝트 명 -->
<web-resource-name>JSPBook</web-resource-name>
<!-- 접근을 제한할 요청 경로. role1 권한을 가진 사람만 jsp에 요청가능 -->
<url-pattern>/ch10/security01.jsp</url-pattern>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<description></description>
<!-- security01.jsp와 role1 연결됨 -->
<!-- 권한이 부여된 role 이름 -->
<role-name>role1</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<!-- BASIC 인증 처리 기법으로 설정. tomcat-users.xml에 설정한 아이디/비번을 입력해야만 인증가능. -->
<auth-method>BASIC</auth-method>
</login-config>
- security01.jsp실행시
2) form기반 인증처리 기법
<security-role>
<role-name>role1</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<!-- 프로젝트 명 -->
<web-resource-name>JSPBook</web-resource-name>
<!-- 접근을 제한할 요청 경로. role1 권한을 가진 사람만 jsp에 요청가능 -->
<url-pattern>/ch10/security01.jsp</url-pattern>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<description></description>
<!-- security01.jsp와 role1 연결됨 -->
<!-- 권한이 부여된 role 이름 -->
<role-name>role1</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<!-- FORM 기반 인증 처리 기법으로 설정. -->
<auth-method>FORM</auth-method>
<form-login-config>
<!-- 인증 처리를 위한 로그인 페이지 설정 -->
<form-login-page>/ch10/login.jsp</form-login-page>
<!-- 인증 실패시 페이지 설정 -->
<form-error-page>/ch10/login_falied.jsp</form-error-page>
</form-login-config>
</login-config>
- login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<title>Security</title>
</head>
<body>
<!-- 폼 기반 인증 처리를 위해 j_security_check을 사용 -->
<form name="loginForm" action="j_security_check" method="post">
<p>사용자명: <input type="text" name="j_username" /></p>
<p>비밀번호: <input type="password" name="j_password" /></p>
<p><input type="submit" value="전송" /></p>
</form>
</body>
</html>
- login_failed
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<title>Security</title>
</head>
<body>
<h2>인증 실패^0^</h2>
</body>
</html>
3) 상품추가 페이지 접근시 권한확인
- web.xml
<?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>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--
error-code : 404(없다), 500(개발자실수) 등의 응답 상태 코드
location : 오류페이지의 URI(URL+기능)
-->
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error/500.jsp</location>
</error-page>
<!-- 시큐리티 역할 admin 관리 시작 -->
<!-- <security-role> -->
<!-- <role-name>admin</role-name> -->
<!-- </security-role> -->
<security-constraint>
<web-resource-collection>
<web-resource-name>JSPBook</web-resource-name>
<!-- 접근을 제한할 요청 경로 -->
<url-pattern>/ch04/addProduct.jsp</url-pattern>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<description></description>
<!-- 권한이 부여된 role 이름 -->
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>JSPBook</web-resource-name>
<!-- 접근을 제한할 요청 경로 -->
<url-pattern>/ch03/*</url-pattern>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<description></description>
<!-- 권한이 부여된 role 이름 -->
<role-name>tomcat</role-name>
</auth-constraint>
</security-constraint>
<!-- 시큐리티 인증 설정 -->
<login-config>
<!-- BASIC 인증 처리 기법으로 설정 -->
<!-- <auth-method>BASIC</auth-method> -->
<!-- FORM 기반 인증 처리 기법으로 설정 -->
<auth-method>FORM</auth-method>
<form-login-config>
<!-- 인증 처리를 위한 로그인 페이지 설정 -->
<form-login-page>/ch04/login.jsp</form-login-page>
<!-- 인증 실패 시 오류 페이지 설정 -->
<form-error-page>/ch04/login_failed.jsp</form-error-page>
</form-login-config>
</login-config>
<!-- 시큐리티 역할 role1 관리 끝 -->
</web-app>
- login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
<link rel="stylesheet" href="/css/bootstrap.min.css" />
</head>
<body>
<div class="jumbotron">
<div class="container">
<h1 class="display-3">로그인</h1>
</div>
</div>
<div class="container" align="center">
<div class="col-md-4 col-md-offset-4">
<h3 class="form-signin-heading">Please Sign in</h3>
<!-- login_failde의 response.sendRedirect("login.jsp?error=1"); -->
<c:if test="${param.error == 1}">
<div class ="alert alert-danger">
아이디와 비밀번호를 확인해주세요
</div>
</c:if>
</div>
<!--j_security_check : 폼기반 인증처리 -->
<form class="form-signin" method="post" action="j_security_check">
<div class="form-group">
<label for = "inputUserName" class="sr-only">User Name</label>
<input type="text" class="form-control" placeholder="ID" name="j_username" required autofocus />
</div>
<div class="form-group">
<label for = "inputPassword" class="sr-only">Password</label>
<input type="password" class="form-control" placeholder="PASS" name="j_password" required autofocus />
</div>
<button class="btn btn btn-lg btn-success btn-block" type="submit">로그인</button>
</form>
</div>
</body>
</html>
<c:if test="${param.error == 1}">
<div class ="alert alert-danger">
아이디와 비밀번호를 확인해주세요
</div>
</c:if>
Author And Source
이 문제에 관하여([JSP] 시큐리티), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vgo_dongv/JSP-시큐리티저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)