티스토리 뷰

AuthenFilter.java

package ch12.com.filter;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class AuthenFilter implements Filter {
	
//	소멸단계에 필요한 메서드 오버라이딩
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		Filter.super.destroy();
	}
//	로드 및 초기화에 필요한 메서드 오버라이딩
	@Override
	public void  init(FilterConfig filterConfig) throws ServletException{
		System.out.println("Frlter01 초기화....");
	}
//	해당 매핑이 된 jsp 페이지에 대해 해당 값이 입력되었을 때 수행되어야 할 제어문 작성
	@Override
//	요청,응답,체인 작성
	public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException
	{
//		수행중 가이드 작성
		System.out.println("Filter01.jsp 수행...");
//		변수 설정
		String name= request.getParameter("name");
//		해당 변수의 값이 null이거나 공백일 경우 수행
		if(name==null || name.equals(""))
		{
//			인코딩 작업
			response.setCharacterEncoding("UTF-8");
//			페이지 인코딩 
			response.setContentType("text/html; charset=UTF-8");
//			out.println과 동일하나 jsp 사용할 수 있는 메서드 사용
			PrintWriter writer = response.getWriter();
//			조건문에 따른 가이드 메세지 작성
			String message ="입력된 name 값은 null입니다.";
//			가이드 메세지 출력
			writer.println(message);
//			값 반환
			return;
		}
//		연속적으로 필터가 있을 경우 다음 필터로 제어를 넘길 수 있도록
//		FilterChain 객체 타입의 dofilter() 메서드 작성
//		dofilter의 매개변수로 filterchain 묶기
		filterChain.doFilter(request, response);
	}

}

web.xml

	 filter 작성
	 <filter>
		 filter name 작성
	 	<filter-name>Filter01</filter-name>
		filter 적용 클래스 작성- 자바는 '/' 말고 '.'을 사용, .java 사용x
	 	<filter-class>ch12.com.filter.AuthenFilter</filter-class>
	 </filter>
		filter-mapping 적용할 jsp페이지 작성
	 <filter-mapping>
		Filter name 작성
	 	<filter-name>Filter01</filter-name>
		url-pattern 을 통해 해당 페이지에 필터장착.
	 	<url-pattern>/ch12/filter01_process.jsp</url-pattern>
	 </filter-mapping>

filter01.jsp

<%@ 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으로 갈때 request 객체에 넣어두고 간다. -->
	<!-- method를 post방식으로 웹브라우저에서 웹서버로 전달 -->
	<form action="filter01_process.jsp" method="post">
		<!-- name 값 text type으로 입력 -->
		<p> 이름 : <input type="text" name="name">
		<!-- submit 방식으로 전송 버튼 누를 때 이동 -->
		<!--  -->
		<input type=submit value="전송">
	</form>
</body>
</html>

filter_process.jsp

<%@ 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>
	<!-- mapping 설정된 jsp 페이지. -->
	<%
		/* request에 담긴 name값의 value를 name에 할당. */
		String name = request.getParameter("name");
	%>
	<!-- 해당 값을 출력.  -->
	<!-- null값 || 공백일 경우 web.xml에 설정된 필터를 통해 java AuthenFilter.java의 -->
	<!-- 제어문 if 작동.  -->
	<p> 입력된 결과 값 : <%=name%>
</body>
</html>

InitParameterFilter.java

package ch12.com.filter;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class InitParameterFilter implements Filter{

//	해당 클래스에서만 사용할 수 있도록 접근제어자 private 작성 및 변수 설정.
	private FilterConfig filterConfig = null;

//	init() 메서드를 통해 로드및초기화를 시켜준다. 예외를 ServletException으로 처리하게끔 던져준다.
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("Filter02 초기화..");
		this.filterConfig  = filterConfig;
	}


	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
		// TODO Auto-generated method stub
//		doFilter() 메서드가 작동하는지 가이드 작성
		System.out.println("Filter02 수행중...");
		
//		변수 설정
		
//		id,passwd 값을 request의 내장객체 메서드인 getParameter()를 통해 key입력을 통해
//		관련한 값을 id,passwd에 할당
		String id = request.getParameter("id");
		String passwd = request.getParameter("passwd");
//		filterConfig는 web.xml 의 <init-param> name,value값을 가져온다.
//		filterConfig안의 메서드인 getInitParameter()메서드를 통해 해당 입력 key의 값을 변수에 할당.
		String param1 = filterConfig.getInitParameter("param1");
		String param2 = filterConfig.getInitParameter("param2");
//		문자열 선언 / 제어문을 통한 실행부분을 통해 작성하기 위함
		String message;
//		response 안에 setCharacterEncoding, setContentType을 통해 UTF-8 지정
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
//		PrintWriter 타입으로 response의 getWriter메서드를 참조변수에 저장.
//		출력을 해주는 메서드 out.println과 동일.
		PrintWriter writer = response.getWriter();
//		입력 값과 web.xml 지정값이 일치할 경우와 일치하지 않을 경우 해당 문구 초기화
		if(id.equals(param1) && passwd.equals(param2))
		{
			message = "로그인 성공했습니다.";
		}
		else
		{
			message = "로그인 실패했습니다.";
		}
//		출력문구
		writer.println(message);
//		필터가 연속적으로 일어날 경우 다음 필터로 넘어가지도록(체이닝) FilterChain
//		객체 타입의 doFilter() 메서드 작성.
		filterChain.doFilter(request, response);
	}

	
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		Filter.super.destroy();
		System.out.println("Filter02 해제...");
	}

}

web.xml

 		filter작성 
	 <filter>
	 	filter-name작성
	 	<filter-name>Filter02</filter-name>
	 	필터 클래스 경로 지정.
	 	<filter-class>ch12.com.filter.InitParameterFilter</filter-class>
	 	id,passwd 변수에 value값 지정.
	 	<init-param>
	 		<param-name>param1</param-name>
	 		<param-value>admin</param-value>
	 	</init-param>
	 	<init-param>
	 		<param-name>param2</param-name>
	 		<param-value>1234</param-value>
	 	</init-param>
	 </filter>
	 필터 매핑 작성
	 <filter-mapping>
	 	filter name 지정
	 	<filter-name>Filter02</filter-name>
	 	url-pattern mapping 대상 지정.
	 	<url-pattern>/ch12/filter02_process.jsp</url-pattern>
	 </filter-mapping>

filter02.jsp

<%@ 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 작성, 웹브라우저에서 웹 서버로 보내는 방법 method로 설정 -->
	<form action="filter02_process.jsp" method="post">
		<!-- input 박스 생성 name 값 id 지정 -->
		<p> id : <input type="text" name="id">
		<!-- name value passwd 지정 -->
		<p> passwd : <input type="text" name="passwd">
		
		<br>
		<!-- submit 전송 버튼 누르면 action을 취한다. -->
		<input type=submit value="전송">
	</form>
</body>
</html>

filter02_process.jsp

<%@ 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 id = request.getParameter("id");
		String passwd = request.getParameter("passwd");
	%>
	<p> 입력된 id 값 : <%=id%>
	<p> 입력된 pw 값 : <%=passwd %>
</body>
</html>

 

LogFileFilter.java

package ch12.com.filter;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import java.text.*;
import javax.servlet.*;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class LogFileFilter implements Filter{

	PrintWriter writer;
//	private FilterConfig filterConfig = null;
	


	@Override
//	init() 메서드 실행 매개변수로 filterConfig 타입의  filterConfig 변수 / 예외 발생시 ServletException으로 전송
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		Filter.super.init(filterConfig);
//		filterConfig안의 getparameter() 메서드를 통해 "filename"을 가져와 문자열타입의 변수에 할당
		String filename = filterConfig.getInitParameter("filename");
		//filename 값이 null일 경우 실행
		if(filename==null)
		{
			//객체 생성후 던지기(일회용) 
			throw new ServletException("로그 파일의 이름을 찾을 수 없습니다.");
		}
		
//		예외 발생할 구문에 try문 작성
		try
		{
//			jsp에서 출력을 시켜줄 메서드 PrintWriter 객체 생성.
//			PrintWriter를 해야하는데 파일이 없을 수가 있으니 파일 또한 생성( new FileWriter)
//			FileWriter의 매개변수 첫번째는 로그 파일의 이름을 설정하는 것이고, true값을 두번째로 전달
//			함으로써 내용을 이어서 추가할 수 있도록 합니다.
//			PrintWriter의 매개변수의 두번째 값으로 true를 적어주는 이유는 객체 생성 시에
//			true를 매개변수로 전달해 자동으로 flush() 메서드를 호출해서 버퍼를 비워주도록 해줍니다.
			writer =new PrintWriter(new FileWriter(filename,true),true );
		}
//		발생할 예외를 처리할 객체 생성
		catch(IOException e)
		{
//			ServletException 예외를 발생새켜서 로그 파일을 열 수 없다는 메세지를 출력해줍니다.
			throw new ServletException("로그 파일을 열 수 없습니다.");
		}
	}
	
	
//	doFIlter() 메서드 생성, 매개변수로 request,response,filterChain 을 받습니다.
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
//		printf -  %s는 문자열, %n는 줄바꿈 , getCurrentTime()메서드를 통해 현재 시간을 알려줍니다.
		writer.printf("현재 일시 : %s %n " , getCurrentTime());
//		request의 내장객체인 getRemoteAddr()메서드를 통해 IP주소값을해당 변수에 할당합니다.
		String clientAddr = request.getRemoteAddr();
//		IP주소가 저장된 문자열 변수 출력메서드를 통해 출력합니다.
		writer.printf("클라이언트 주소 : %s %n", clientAddr);
		
//	 	필터가 이어질 수 있게 FilterChain을 통한 doFilter에 사용되는 필터를 이어줍니다.
		filterChain.doFilter(request, response);
//		response의 내장객체인 getContentType()메서드를 통해 요청한 문서의 콘텐츠 유형을 가져와
//		문자열 변수에 할당합니다.
		String contentType =response.getContentType();
//		문서 콘텐츠 유형이 저장된 변수를 출력합니다.
		writer.printf("문서의 콘텐츠 유형 : %s %n " , contentType);
//		구분선을 출력합니다.
		writer.println("-----------------------------------");
		
	}

// 소멸을 하기전에 실행하는 메서드
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		Filter.super.destroy();
//		writer의 메서드를 종료시켜줍니다.
		writer.close();
	}
	
	private String getCurrentTime() {
		// TODO Auto-generated method stub
//		DateFormat타입으로 SimpleDateFormat메서드에 패턴을 담아 변수에 저장합니다.
		DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//		Calendar객체 안의 getInstance()메서드를 통해 현재시간을 변수에 저장합니다.
		Calendar calendar = Calendar.getInstance();
//		현재 시간을 설정하기 위해서 아래 구문을 호출합니다.
		calendar.setTimeInMillis(System.currentTimeMillis());
//		calendar 객체의 시간을 formatter의 형식에 맞게 문자열로 변환되어 반환합니다.
//		따라서 getCurrentTime()메서드를 호출한다면 formatter에 저장된
//		패턴의 형식에 따라 현재 시간을 문자열로 얻을 수가 있습니다.
		return formatter.format(calendar.getTime());
	}
	
}

web.xml

	 필터 작성
	<filter>
	필터 네임 작성
	 	<filter-name>Filter02_2</filter-name>
	 	해당 필터의 java 클래스 지정/경로
	 	<filter-class>ch12.com.filter.LogFileFilter</filter-class>
	 	필터에 필요한 변수,값 작성
	 	<init-param>
	 		변수 이름을 filename으로 설정
	 		<param-name>filename</param-name>
	 		값을 해당 경로로 설정
	 		<param-value>C:\\logs\\monitor.log</param-value>
	 	</init-param>
	 </filter>
	 필터 매핑 지정
	 <filter-mapping>
	 	필터 이름 지정
	 	<filter-name>Filter02_2</filter-name>
	 	필터를 사용할 jsp page 지정 
	 	<url-pattern>/ch12/filter02_process.jsp</url-pattern>
	 </filter-mapping>

filter02.jsp

<%@ 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 작성, 웹브라우저에서 웹 서버로 보내는 방법 method로 설정 -->
	<form action="filter02_process.jsp" method="post">
		<!-- input 박스 생성 name 값 id 지정 -->
		<p> id : <input type="text" name="id">
		<!-- name value passwd 지정 -->
		<p> passwd : <input type="text" name="passwd">
		
		<br>
		<!-- submit 전송 버튼 누르면 action을 취한다. -->
		<input type=submit value="전송">
	</form>
</body>
</html>

filter02_process.jsp

<%@ 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 id = request.getParameter("id");
		String passwd = request.getParameter("passwd");
	%>
	<p> 입력된 id 값 : <%=id%>
	<p> 입력된 pw 값 : <%=passwd %>
</body>
</html>

 

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

11주-2일  (0) 2023.12.19
11주차-1일  (0) 2023.12.18
10주차-1일  (0) 2023.12.11
9주차-5일  (0) 2023.12.08
9주차-4일  (0) 2023.12.07
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함