K 개발자
JSP BookMarket 만들기 - 9 본문
이전 글
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 |