tomcat-users.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<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">
<!--
By default, no user is included in the "manager-gui" role required
to operate the "/manager/html" web application. If you wish to use this app,
you must define such a user - the username and password are arbitrary.
Built-in Tomcat manager roles:
- manager-gui - allows access to the HTML GUI and the status pages
- manager-script - allows access to the HTTP API and the status pages
- manager-jmx - allows access to the JMX proxy and the status pages
- manager-status - allows access to the status pages only
The users below are wrapped in a comment and are therefore ignored. If you
wish to configure one or more of these users for use with the manager web
application, do not forget to remove the <!.. ..> that surrounds them. You
will also need to set the passwords to something appropriate.
-->
<!--
<user username="admin" password="<must-be-changed>" roles="manager-gui"/>
<user username="robot" password="<must-be-changed>" roles="manager-script"/>
-->
<!--
The sample user and role entries below are intended for use with the
examples web application. They are wrapped in a comment and thus are ignored
when reading this file. If you wish to configure these users for use with the
examples web application, do not forget to remove the <!.. ..> that surrounds
them. You will also need to set the passwords to something appropriate.
-->
<!--
시큐리티(security) : 허가된 사용자만이 특정 웹페이지에 접근할 수 있도록 제한하는 보안 기능
1) 인증(authentication) : 로그인(아이디, 비밀번호)
2) 인가(authorization) : 로그인 후 권한 체킹
-->
<role rolename="tomcat"/><!-- 역할 -->
<role rolename="role1"/><!-- 역할 -->
<user username="tomcat" password="java" roles="tomcat"/><!-- 사용자 -->
<user username="both" password="java" roles="tomcat,role1"/><!-- 사용자 -->
<user username="role1" password="java" roles="role1"/><!-- 사용자 -->
<role rolename="admin"/><!-- 역할 -->
<user username="admin" password="java" roles="admin"/><!-- 관리자 사용자 -->
</tomcat-users>
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_4_0.xsd" id="WebApp_ID" version="4.0">
<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>
<!--
선언적 시큐리티 처리 : web.xml 파일에 보안 구성을 작성
(역할-role, 사용자-username, URL 경로)을 작성
- 역할/사용자 : tomcat-users.xml에 등록된 역할/사용자
web.xml : 웹 애플리케이션 배포 설명자 파일(톰캣 설정)
-->
<!-- 시큐리티 역할(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>
<!-- 시큐리티 역할(role) 설정 끝 -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- 1번째 security01-->
<!-- 시큐리티 제약 사항(constraint)을 설정 시작 -->
<security-constraint>
<web-resource-collection>
<!-- 웹 자원의 이름 설정(생략 가능) -->
<web-resource-name>JSPBOOK</web-resource-name>
<!-- 접근 제한 요청 URL -->
<url-pattern>/ch10/security01.jsp</url-pattern>
<!-- HTTP 메서드(get, post) -->
<http-method>GET</http-method>
</web-resource-collection>
<!-- 권한이 부여된 사용자만이 웹 자원에 접근할 수 있도록 설정 -->
<auth-constraint>
<description>설명</description>
<role-name>role1</role-name>
</auth-constraint>
</security-constraint>
<!-- 시큐리티 제약 사항(constraint)을 설정 끝 -->
<!-- 2번째 security02-->
<!-- 시큐리티 제약 사항(constraint)을 설정 시작 -->
<security-constraint>
<web-resource-collection>
<!-- 웹 자원의 이름 설정(생략 가능) -->
<web-resource-name>JSPBOOK</web-resource-name>
<!-- 접근 제한 요청 URL -->
<url-pattern>/ch10/security02.jsp</url-pattern>
<!-- HTTP 메서드(get, post) -->
<http-method>GET</http-method>
</web-resource-collection>
<!-- 권한이 부여된 사용자만이 웹 자원에 접근할 수 있도록 설정 -->
<auth-constraint>
<description>설명</description>
<role-name>tomcat</role-name>
</auth-constraint>
</security-constraint>
<!-- 시큐리티 제약 사항(constraint)을 설정 끝 -->
<!-- 3번째 addProducts-->
<!-- 시큐리티 제약 사항(constraint)을 설정 시작 -->
<security-constraint>
<web-resource-collection>
<!-- 웹 자원의 이름 설정(생략 가능) -->
<web-resource-name>JSPBOOK</web-resource-name>
<!-- 접근 제한 요청 URL -->
<url-pattern>/addProduct.jsp</url-pattern>
<!-- HTTP 메서드(get, post) -->
<http-method>GET</http-method>
</web-resource-collection>
<!-- 권한이 부여된 사용자만이 웹 자원에 접근할 수 있도록 설정 -->
<auth-constraint>
<description>관리자만 가능</description>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<!-- 시큐리티 제약 사항(constraint)을 설정 끝 -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- 인증(authentication) 처리를 위한 로그인 및 로그인 실패 페이지 설정 시작 -->
<login-config>
<!-- 웹 자원에 대한 인증 처리 방식 BASIC(간단,일반) / DIGEST(암호화)
/ FORM(사용자 폼 페이지) /CLIENT-CERT(공인 키 인증) -->
<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>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.util.Date"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
<link rel="stylesheet" href="/css/bootstrap.min.css">
</head>
<body>
<!-- header -->
<%@ include file="menu.jsp" %>
<!-- 표현문 -->
<div class="jumbotron">
<div class="container">
<h1 class="display-3">로그인</h1>
</div>
</div>
<div class="container" style="justify-content:center; display:flex;">
<div class="col-md-4 col-md-offset-4" style="width:33%;">
<h3 class="form-signin-heading">Please sign in</h3>
<!-- /login.jsp?error=1
error=1 => param
param.error => 1 (문자열)-->
<c:if test="${param.error=='1'}">
<div class="alert alert-danger">
아이디와 비밀번호를 확인해주세요.
</div>
</c:if>
<!-- 시큐리티 인증을 위한 Form 페이지 시작 -->
<form name="loginForm" method="post" action="j_security_check">
<!-- name속성의 값인 j_username은 변경할 수 없음 -->
<div class="form-group">
<label for="inputUserName" class="sr-only">User Name</label>
<input type="text" name="j_username" class="form-control" autofocus id="inputUserName" placeholder="아이디" required/>
</div>
<!-- name속성의 값인 j_password도 변경할 수 없음 -->
<div class="form-group">
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" name="j_password" class="form-control" id="inputPassword" placeholder="비밀번호" required/>
</div>
<!-- submit 버튼 영역 -->
<button type="submit" class="btn btn-lg btn-success btn-block">로그인</button>
</form>
</div>
</div>
<!-- footer -->
<%@ include file="footer.jsp" %>
</body>
</html>
login_failed
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%
// 로그인 자체가 안됨 => 아이디가 없거나 비밀번호가 잘못된 경우
// login.jsp로 강제 이동
response.sendRedirect("/login.jsp?error=1");
%>
menu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%
// 스트립틀릿
// 시큐리티의 로그인 한 사용자명을 가져옴
String username = request.getRemoteUser();
//out.print("<p>username : "+username + "</p>");
%>
<c:set var="username" value="<%=username %>"/>
<nav class="navbar navbar-expand navbar-dark bg-dark">
<div class="container">
<div class="navbar-header" style="width:100%; justify-content:space-between; display:flex;">
<div>
<a class="navbar-brand" href="/welcome.jsp">Home</a>
</div>
<div>
<span class="navber-brand">
<!-- 로그인 했음 -->
<c:if test="${fn:length(username)>0}">
<span style="color:white">${username}님 환영합니다.</span>
<a href="/logout.jsp" class="btn btn-sm btn-success pull-right">logout</a>
</c:if>
<!-- 로그인 안함 -->
<c:if test="${fn:length(username)==0}">
<a href="/addProduct.jsp" class="btn btn-sm btn-success pull-right">로그인 해주세요</a>
</c:if>
</span>
</div>
</div>
</div>
</nav>
logout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%
//FORM 인증 형식을 통해 로그인 처리 시 session에 정보가 들어가 있음
//session객체 : session scope(영역)에서 생성된 내장 객체.
//pageContext(page), request(request)
//, session(session), application(application)
//모든 session을 종료
//로그인 인증 시 웹 브라우저에 자장된 모든 사용자를 삭제
session.invalidate();
//addProduct.jsp를 요청한다는 의미는..
//<role-name>admin</role-name> 롤을 갖고 있어야 함
// /login.jsp에서 로그인 다시 하고 와
response.sendRedirect("addProduct.jsp");
%>
'JAVA > JSP' 카테고리의 다른 글
[JSP] 구현7 - 예외 처리 (0) | 2024.07.12 |
---|---|
[JSP] exception (1) | 2024.07.12 |
[JSP] 시큐리티(security) (0) | 2024.07.10 |
[Python] SPA 형태의 CRUD (0) | 2024.07.10 |
[JSP] 구현5 - 유효성 검사, 다국어(fmt) (0) | 2024.07.09 |