티스토리 뷰

정리 노트

10주차-3일

eyoadgkn 2023. 12. 13. 14:20

프로그래밍적 시큐리티 처리

프로그래밍적 시큐리티는 웹 애플리케이션의 보안을 위해 코드를 작성해 사용자의 권한 부여를 처리하는 방식입니다. 선언적 시큐리티의 보안으로 충분하지 않을 경우에 request 내장 객체의 메서드를 사용해 사용자를 승인하는 방법입니다.

보안관련해서 request 내장 객체의 종류

메서드 형식 설명
getRemoteuser() String 사용자의 인증 상태를 반환.
getAuthType() String 서블릿을 보호하는 데 사용되는 인증 방식의 이름을 반환합니다.
isUserInRole(java.lang.String role) boolean 현재 인증된 사용자에게 설정된 역할이 있는지 확인합니다. 설정된 경우 true를 반환하고 아닐 경우 false를 반환합니다.
getProtocol() String 웹 브라우저의 요청 프로토콜을 가져옵니다.
isSecure() boolean 웹 브라우저에서 http 요청으로 request가 들어왔는지 확인합니다. 웹 브라우저 에서 http로 접근하면 true를 반환, 아닐경우 false를 반환합니다.
getUserPrinciple() Principle 현재 인증한 사용자의 이름을 포함해 java.security.Principle객체를 반환합니다.

 

 

예외 처리

 

예외 처리
예외 처리

예외처리는 프로그램이 처리되는 동안 특정 문제가 발생했을 때, 현재 진행중인 처리를 중단하고, 다른 처리를 하는 것으로 오류 처리라고도 합니다. 사용하는 이유는 웹 애플리케이션 실행 도중에 발생할 수 있는 오류에 대비한 예외 처리 코드를 작성해 비정상적인 종료를 막을 수가 있기 때문입니다.

예외처리 방법의 종류

예외 처리 방법 설명
page 디렉티브 태그를 이용한 예외 처리 errorPage와 isErrorPage 속성을 이용합니다.
web.xml 파일을 이용한 예외 처리 <error-code> or <exception-type> 요소를 이용합니다.
try-catch-finally를 이용한 예외 처리 자바 언어의 예외 처리 구문을 이용합니다.

web.xml 같은 경우는 페이지가 넘어오기 전에 검사를 한 뒤에 실행되는 것을 막는 것으로 보면됩니다.

page 디렉티브 태그를 이용한 예외 처리

page 디렉티브 태그에 errorPage와 isErrorPage속성을 사용해 오류 페이지를 호출하는 방법입니다.

errorPage 속성으로 오류 페이지 호출하기

errorPage 속성은 오류 페이지를 호출하는 page 디렉티브 태그의 속성입니다. JSP 페이지가 실행되는 도중에 오류가 발생하면 웹 서버의 기본 오류 페이지를 대신해 errorPage 속성에 설정된 페이지가 오류 페이지로 호출이 됩니다.

<%@ page errorPage="오류 페이지.jsp" %>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page errorPage="errorPage_error.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	name 파라미터 : <%= request.getParameter("name").toUpperCase() %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	오류가 발생했습니다.
</body>
</html>

 

 

isErrorPage 속성으로 오류 페이지 만들기 // 오류를 처리하는 페이지를 뜻함.

이 속성은 현재 JSP 페이지를 오류 페이지로 호출하는 page 디렉티브 태그의 속성으로 오류페이지에서 exception 내장 객체를 사용할 수 있게 됩니다.

<%@ page isErrorPage="true" %>

*true로 입력하게 되면 Exception 객체를 자동으로 생성한다는 뜻입니다.

exception 내장 객체의 메서드

메서드 형식 설명
getMessage() String 오류 이벤트와 함께 들어오는 메세지를 출력합니다.
toString() String 오류 이벤트의 toString()을 호출해 간단한 오류 메세지를 확인합니다.
printStackTrace() String 오류 메세지의 발생 근원지를 찾아 단계별로 오류를 출력합니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page errorPage="isErrorPage_error.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	name 파라미터 : <%= request.getParameter("name").toUpperCase() %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p>오류가 발생했습니다.
	<p> 예외 유형 : <%= exception.getClass().getName() %>
	<p> 오류 메세지 : <%= exception.getMessage()%>
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="exception_process.jsp" method="post">
		<p> 숫자1 : <input type="text" name="num1">
		<p> 숫자2 : <input type="text" name="num2">
		<p> <input type="submit" value="나누기">
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page errorPage="exception_error.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String num1 = request.getParameter("num1");
		String num2 = request.getParameter("num2");
		int a = Integer.parseInt(num1);
		int b = Integer.parseInt(num2);
		int c = a/b;
		out.print(num1 + "/" + num2 + "=" + c);
	%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p> 오류가 발생하였습니다.
	<p> 예외 : <%=exception %>
	<p>  toString() : <%=exception.toString() %>
	<p> getClass().getName() : <%= exception.getClass().getName() %>
	<p> getMessage() : <%=exception.getMessage()%>
</body>
</html>

 

 

 

 

web.xml 파일을 이용한 예외 처리

web.xml 파일을 이용한 예외 처리는 web.xml 파일을 통해 오류 상태와 오류페이지를 보여주는 방법으로 
<error-page>---</error-page> 요소 내에서 처리할 오류 코드나 오류 유형 및 오류 페이지를 호출합니다. 
*해당 파일은 /WEB-INF/폴더에 있어야 합니다.

<error-page>를 구성하는 하위 요소

요소 설명
<error-code> 오류 코드를 설정하는데 사용합니다.
<exception-type> 자바 예외 유형의 정규화된 클래스 이름을 설정하는 데 사용합니다.
<location> 오류 페이지의 URL 을 설정하는데 사용합니다.
1.오류 코드로 오류 페이지 호출하기.

오류코드는 웹 서버가 제공하는 기본 오류 페이지를 나타내는 404,500 등과 같이 사용자의 요청이 올바르지 않을 경우 제공,출력 되는 코드로 응답 상태 코드라고도 합니다. 

  /WEB-INF/폴더 안의 web.xml 파일

<error-page>

<error-code>500</error-code>

<location>/ch11/errorCode_error.jsp</location>

</error-page>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
		<form action="errorCode_process.jsp" method="post">
		<p> 숫자1 : <input type="text" name="num1">
		<p> 숫자2 : <input type="text" name="num2">
		<p> <input type="submit" value="나누기">
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String num1 = request.getParameter("num1");
		String num2 = request.getParameter("num2");
		int a = Integer.parseInt(num1);
		int b = Integer.parseInt(num2);
		int c = a/b;
		out.print(num1 + "/" + num2 + "=" + c);
	%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	errorCode 505 오류가 발생했습니다.
</body>
</html>

 

2.예외 유형으로 오류 페이지 호출하기

 

try-catch-finally를 이용한 예외 처리

try-catch-finally는 자바 예외 처리 구문으로 스크립틀릿 태그에 작성을 합니다. try구문에는 예외가 발생할 수 있는 코드를 작성하고, catch 구문에는 오류가 발생할 수 있는 예외 사항을 예측해 오류를 처리하는 코드를 작성합니다. finally 구문에는 try 구문이 실행된 후 실행할 코드를 작성하는데 이것은 생략이 가능합니다. 

//서블릿에서의 jsp 호출(forward방식)

JSP 페이지를 호출하는 순간 서블릿 프로그램이 실행을 멈추며 JSP 페이지로 넘어가서 그곳에서 실행하고 프로그램이 끝납니다.
RequestDispatcher rd = this.getServletContext().getRequestDispatcher("jspFile");
request.setAttribute("name","value");
rd.forward(request,response);

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>	
	<form action="tryCatch_process.jsp" method="post">
		<p> 숫자1 : <input type="text" name="num1">
		<p> 숫자2 : <input type="text" name="num2">
		<p> <input type="submit" value="전송">
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		try
		{
			String num1 = request.getParameter("num1");
			String num2 = request.getParameter("num2");
			int a = Integer.parseInt(num1);
			int b = Integer.parseInt(num2);
			int c = a/b;
			out.print(num1 + "/" + num2 + "=" + c);
		}
		catch(Exception e)
		{
			RequestDispatcher dispatcher = request.getRequestDispatcher
			("tryCatch_error.jsp");
			dispatcher.forward(request,response);
		}
		
	%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p> 잘못된 데이터가 입력되었습니다.
	<p> <%= "숫자 1 : " +request.getParameter("num1") %>
	<p> <%= "숫자 2 : " +request.getParameter("num2") %>
	
</body>
</html>

 

 

 

필터:로그 기억하기

 

필터

필터(filter)는 클라이언트와 서버 사이에서 request와 response 객체를 먼저 받아 사전/사후 작업 등으로 공통적으로 필요한 부분을 처리하는 것을 말합니다.

필터는 클라이언트의 요청이 웹 서버의 서블릿,JSP, HTML 페이지 같은 정적 리소스에 도달하기 전과, 반대로 정적 리소스에서 클라이언트로 응답하기 전에 필요한 전처리를 가능하게 합니다.

Filter 인터페이스의 구현 클래스

FIlter 인터페이스는 필터 기능을 구현하는데 핵심적인 역할을 합니다. 클라이언트와 서버의 리소스 사이에 위치한 필터의 기능을 제공하기 위해서 자바 클래스로 구현해야 하고, 자바 클래스로 구현할 때 패키지 javax.servlet.Filter 를 임포트 하여야 합니다.

import javax.servlet.Filter;

public class 클래스명 implements Filter
{
}

FIlter 인터페이스의 메서드 종류

메서드 설명
init() 필터 인스턴스의 초기화 메서드입니다.
doFilter() 필터 기능을 작성하는 메서드입니다.
destroy() 필터 인스턴스의 종료 전에 호출되는 메서드입니다.

 

1.init()메서드

init() 메서드는 JSP 컨테이너가 필터를 초기화할 때 호출되는 메서드입니다. 
init() 메서드는 JSP 컨테이너 내에서 초기화 작업을 수행할 필터 인스턴스를 생성한 후 한번만 호출이 됩니다.
init() 메서드는 JSP 컨테이너에 의해 호출되어서 필터의 서비스가 시작되고 있음을 나타냅니다.

public void init(FilterCofig filterConfig) throws ServletException

여기서 매개변수 FilterConfig 객체는 JSP 컨테이너가 초기화 중 필터에 정보를 전달하는 데 사용하는 필터 구성 객체입니다.

 

2.doFilter() 메서드
doFIlter() 메서드는 JSP 컨테이너가 필터를 리소스에 적용할 떄마다 호출되는 메서드입니다. init()메서드 후에 호출되며 필터가 어떤 기능을 수행할 필요가 있을 때마다 호출이 됩니다.

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) thorws java.io.IOException, ServletException
*클래스 3개 / 예외 2가지 발생 가능성을 두고 해당 2개의 클래스로 예외 처리.
*첫번째 매개변수는 요청(Request), 두번째 매개변수는 응답(response), 세 번째 매개변수 FilterChain객체는 체인에서 다음 필터를 호출하는데 사용됩니다. 

필터는 연속된 체인을 따라 다음에 존재하는 필터로 이동해 연속적으로 수행합니다. 이때 수행해야할 필터 객체는 doFitler() 메서드의 매개변수 FilterChain 객체로 전달이 됩니다. 이 객체는 동기화를 위해서도 존재를 하지만 필터의 수행 과정을 연속적으로 하는 방법으로도 사용이 됩니다. FitlerChain 객체는 하나의 메서드만 지원을 합니다.

 

doFilter(ServletRequest request, ServletResponse response) void 체인의 다음 필터 또는 리소스로 제어를 전달합니다.

 

3.destroy()메서드
해당 메서드는 필터 인스턴스를 종료하기 전에 호출하는 메서드입니다. JSP 컨테이너가 필터 인스턴스를 삭제하기 전에 청소 작업을 수행하는데 사용하고, 이것은 필터로 열린 리소스를 모두 닫을 수 있는 방법입니다. 이것 또한 init()메서드 처럼 필터의 수명동안 한 번만 호출이 됩니다.

public void destroy(){ syso("필터 해제)}

 

web.xml 파일의 필터 구성

필터를 사용할려면 어떤 필터가 어떤 리소스(대상) 에게 적용이 되는지 JSP 컨테이너에 알려주어야 합니다. 이는 web.xml의 파일에 필터를 설정해줍니다. 

<filter>

<filter-name></filter-name>

<filter-class></filter-class>

</filter>

<filter-mapping>

<filter-name></filter-name>

<url-pattern></url-pattern>

</filter-mapping>

<filter>의 하위요소

요소 설명
<filter-name> 필터 이름을 설정합니다.
<filter-class> 자바 클래스 이름을 설정합니다.
<init-param> 매개변수와 값을 설정합니다.

<filter-mapping>의 하위요소

요소 설명
<filter-name> 필터 이름을 설정
<url-pattern> URL 패턴을 설정합니다.
1.<filter>요소

<filter>요소는 웹 애플리케이션에 자바 필터와 매개변수를 설정하는 데 사용합니다.

<filter>
<filter-name> 필터 이름</filter-name>
<filter-class>클래스 이름</filter-class>
<init-param>
<param-name>매개변수이름</param-name>
<param-value>매개변수 값</param-value>
</inint-param>
</flter>

해당 init-param 요소에 설정된 매개변수와 값을 자바나 JSP 코드에서 접근하는 방식은
String value = getServletConfig().getIninParameter("매개변수 이름");
2.<filter-mapping>요소

<filter-mapping>
   <filter-name>필터이름
   <url-pattern>요청URL패턴
</filter-mapping>

이 요소는 특정 리소스에 대해 어떤 필터를 사용할지 설정하는 데 사용합니다.

 

'정리 노트' 카테고리의 다른 글

12주-4일차  (0) 2023.12.29
10주차-5일 slide  (0) 2023.12.15
10주차-2일  (0) 2023.12.12
8주차-1일  (0) 2023.11.27
7주차-5일  (0) 2023.11.25
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함