K 개발자

JSP BookMarket 만들기 - 9 본문

Web/JSP

JSP BookMarket 만들기 - 9

ddingz 2021. 8. 6. 18:11

이전 글
JSP BookMarket 만들기 - 1
JSP BookMarket 만들기 - 2
JSP BookMarket 만들기 - 3
JSP BookMarket 만들기 - 4
JSP BookMarket 만들기 - 5
JSP BookMarket 만들기 - 6
JSP BookMarket 만들기 - 7
JSP BookMarket 만들기 - 8

실행 환경
자바 개발 환경 : jdk-15.0.2
웹 서버 환경 : Apache Tomcat v9.0
통합 개발 환경 : Eclipse IDE for Enterprise Java Developers

도서 등록 페이지의 보안 처리하기

이클립스의 Server 프로젝트에 있는 tomcat-users.xml 파일의 사용자와 역할에 대한 내용을 추가 작성한다.

<?xml version="1.0" encoding="UTF-8"?>
<!-- tomcat-users.xml -->

<tomcat-users version="1.0"
	xmlns="http://tomcat.apache.org/xml"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd">

	<role rolename="tomcat" />
	<role rolename="role1" />
	<role rolename="admin" />
	<user username="tomcat" password="tomcat1234" roles="tomcat" />
	<user username="both" password="both1234" roles="tomcat,role1" />
	<user username="role1" password="role1234" roles="role1" />
	<user username="admin" password="admin1234" roles="admin" />

</tomcat-users>

WebContent/WEB-INF 폴더에 웹 애플리케이션 배포 설명자 web.xml 파일을 생성하고 시큐리티 태그를 작성한다.

  • 접근을 제한할 요청 페이지 addBook.jsp의 경로를 설정하도록 작성한다.
  • FORM 인증 처리 기법을 설정하도록 작성한다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- web.xml -->

<web-app>
	<security-role>
		<description></description>
		<role-name>admin</role-name>
	</security-role>
	<security-constraint>
		<display-name>BookMarket Security</display-name>
		<web-resource-collection>
			<web-resource-name>BookMarket</web-resource-name>
			<description></description>
			<url-pattern>/addBook.jsp</url-pattern>
		</web-resource-collection>
		<auth-constraint>
			<description>권한 관리자명</description>
			<role-name>admin</role-name>
		</auth-constraint>
	</security-constraint>
	<login-config>
		<auth-method>FORM</auth-method>
		<form-login-config>
			<form-login-page>/login.jsp</form-login-page>
			<form-error-page>/login_failed.jsp</form-error-page>
		</form-login-config>
	</login-config>
</web-app>

WebContent 폴더에 로그인 페이지 login.jsp 파일을 생성하고 폼 기반 인증을 처리하도록 작성한다.

<%-- login.jsp --%>
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css" />
<title>Login</title>
</head>
<body>
	<jsp:include page="menu.jsp" />
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">로그인</h1>
		</div>
	</div>
	<div class="container" align="center">
		<div class="col-md-4 com-md-offset-4">
			<h3 class="form-signin-heading">Please sign in</h3>
			<%
				String error = request.getParameter("error");
				if (error != null) {
					out.println("<div class='alert alert-danger'>");
					out.println("아이디와 비밀번호를 확인해주세요");
					out.println("</div>");
				}
			%>
			<form class="form-signin" action="j_security_check" method="post">
				<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="Password"
						name='j_password' required>
				</div>
				<button class="btn btn btn-lg btn-success btn-block" type="submit">로그인</button>
			</form>
		</div>
	</div>
</body>
</html>

WebContent 폴더에 로그인 인증 실패 페이지 login_failed.jsp 파일을 생성하고, 인증 실패 시 로그인 페이지로 이동하도록 작성한다.

<%-- login_failed.jsp --%>
<%
	response.sendRedirect("login.jsp?error=1");
%>

WebContent 폴더에 로그아웃 페이지 logout.jsp 파일을 생성하고, 설정된 세션을 삭제한 후 addBook.jsp로 이동하도록 작성한다.

<%-- logout.jsp --%>
<%@ page contentType="text/html; charset=utf-8"%>
<%
	session.invalidate();
	response.sendRedirect("addBook.jsp");
%>

WebContent 폴더의 도서 등록 페이지 addBook.jsp 파일에 <로그아웃> 버튼을 추가 작성한다.

<%-- addBook.jsp --%>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css">
<script type="text/javascript" src="./resources/js/validation.js"></script>
<title>도서 등록</title>
</head>
<body>
	<fmt:setLocale value='<%=request.getParameter("language")%>' />
	<fmt:bundle basename="bundle.message">
		<jsp:include page="menu.jsp" />
		<div class="jumbotron">
			<div class="container">
				<h1 class="display-4"><fmt:message key="title" /></h1>
			</div>
		</div>
		<div class="container">
			<div class="text-right">
				<a href="?language=ko">Korean</a>|<a href="?language=en">English</a>
				<a href="logout.jsp" class="btn btn-sm btn-success pull-right">logout</a>
			</div>
			<form name="newBook" action="./processAddBook.jsp"
				class="form-horizontal" method="post" enctype="multipart/form-data">
				<div class="form-group row">
					<label class="col-sm-2"><fmt:message key="bookId" /></label>
					<div class="col-sm-3">
						<input type="text" id="bookId" name="bookId" class="form-control">
					</div>
				</div>
				<div class="form-group row">
					<label class="col-sm-2"><fmt:message key="name" /></label>
					<div class="col-sm-3">
						<input type="text" id="name" name="name" class="form-control">
					</div>
				</div>
				<div class="form-group row">
					<label class="col-sm-2"><fmt:message key="unitPrice" /></label>
					<div class="col-sm-3">
						<input type="text" id="unitPrice" name="unitPrice"
							class="form-control">
					</div>
				</div>
				<div class="form-group row">
					<label class="col-sm-2"><fmt:message key="author" /></label>
					<div class="col-sm-3">
						<input type="text" name="author" class="form-control">
					</div>
				</div>
				<div class="form-group row">
					<label class="col-sm-2"><fmt:message key="publisher" /></label>
					<div class="col-sm-3">
						<input type="text" name="publisher" class="form-control">
					</div>
				</div>
				<div class="form-group row">
					<label class="col-sm-2"><fmt:message key="releaseDate" /></label>
					<div class="col-sm-3">
						<input type="text" name="releaseDate" class="form-control">
					</div>
				</div>
				<div class="form-group row">
					<label class="col-sm-2"><fmt:message key="totalPages" /></label>
					<div class="col-sm-3">
						<input type="text" name="totalPages" class="form-control">
					</div>
				</div>
				<div class="form-group row">
					<label class="col-sm-2"><fmt:message key="description" /></label>
					<div class="col-sm-5">
						<textarea name="description" cols="50" rows="2"
							class="form-control" placeholder="100자 이상 적어주세요"></textarea>
					</div>
				</div>
				<div class="form-group row">
					<label class="col-sm-2"><fmt:message key="category" /></label>
					<div class="col-sm-3">
						<input type="text" name="category" class="form-control">
					</div>
				</div>
				<div class="form-group row">
					<label class="col-sm-2"><fmt:message key="unitsInStock" /></label>
					<div class="col-sm-3">
						<input type="text" id="unitsInStock" name="unitsInStock"
							class="form-control">
					</div>
				</div>
				<div class="form-group row">
					<label class="col-sm-2"><fmt:message key="condition" /></label>
					<div class="col-sm-5">
						<input type="radio" name="condition" value="New">
						<fmt:message key="condition_New" />
						<input type="radio" name="condition" value="Old">
						<fmt:message key="condition_Old" />
						<input type="radio" name="condition" value="EBook">
						<fmt:message key="condition_Refurbished" />
					</div>
				</div>
				<div class="form-group row">
					<label class="col-sm-2"><fmt:message key="bookImage" /></label>
					<div class="col-sm-5">
						<input type="file" name="bookImage" class="form-control">
					</div>
				</div>
				<div class="form-group row">
					<div class="col-sm-offset-2 col-sm-10 ">
						<input type="button" class="btn btn-primary"
							value="<fmt:message key="button" />" onclick="CheckAddBook()">
					</div>
				</div>
			</form>
		</div>
	</fmt:bundle>
</body>
</html>

웹 브라우저에 'http://localhost:8080/BookMarket/addBook.jsp'를 입력하여 실행 결과를 확인한다.

다음 글
JSP BookMarket 만들기 - 10
JSP BookMarket 만들기 - 11
JSP BookMarket 만들기 - 12
JSP BookMarket 만들기 - 13
JSP BookMarket 만들기 - 마지막

'Web > JSP' 카테고리의 다른 글

JSP BookMarket 만들기 - 11  (0) 2021.08.06
JSP BookMarket 만들기 - 10  (0) 2021.08.06
JSP BookMarket 만들기 - 8  (0) 2021.08.06
JSP BookMarket 만들기 - 7  (0) 2021.08.06
JSP BookMarket 만들기 - 6  (0) 2021.08.06
Comments