프로그래밍

[Web] day43 : 필터(.java 클래스) 본문

Web/Web

[Web] day43 : 필터(.java 클래스)

시케 2023. 8. 6. 22:58
728x90
반응형

2023.07.05.수

필터

필터는 사용자(브라우저, 클라이언트)의 요청에 특정 기능을 부여하기 위해 사용한다

데이터를 받아서 원하는 데이터만 거르거나 정제하는 역할로

어떠한 데이터를 보내주기 전에 혹은 보여주기 전에 확인한다

 

ex)인코딩, 데이터 정제, 권한체크, 로그, 보안, ... 

 

 

※ 필터 클래스는 대표적인 NOT POJO 중에 하나이다

NOT POJO

ex) severlet, Listener, filter

2023.08.06 - [분류 전체보기] - [Web] POJO와 NOT POJO

 

[Web] POJO와 NOT POJO

2023.07.05.수 POJO와 NOT POJO POJO란 우리가 일반적으로 Class 파일로 만드는 자바 클래스 객체이다 그럼 NOT POJO란 뭘까? NOT POJO는 아주 오래전부터 존재해왔던 기초적인 파일이다 현재에는 대부분의 개

dev-9rm.tistory.com

 

 

 

필터 동작 시기

사용자(브라우저, 클라이언트)의 요청 직후에 호출

정확히 말하면 "Filter mappings" 설정한대로 호출된다

 

VIew 에서 사용자의 요청 직후 Controller에서 호출하기 때문에

필터는 Controller의 영역이라고 생각하면 쉽다

 

필터 클래스 생성

필터 클래스는 대표적인 NOT POJO 이므로

기본적인 생성만 해도 이미 여러가지 import가 되어있는 것을 볼 수 있다

 

@WebFilter

@ 어노테이션을 통해 어떠한 요청에 대해 작동할건지 지정한다

생성자는 기본 생성자이며 멤버변수 초기화는 init()에서 진행된다

 

intit()

init()은 필터가 생성될 때 자동 호출되며 단 1번만 실행된다

 

destory()

destory()은 필터가 메모리에서 해제될때 호출된다

(보안일 경우 보안을 마치겠다는 의미이기 때문에 보안셧다운 로그로 많이 사용한다)

 

doFilter()

실질적 필터가 수행할 내용이다

 

 

인코딩 필터 예제

EncFilter.java

package test;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;

/**
 * Servlet Filter implementation class EncFilter
 */
// @ 어노테이션(애너테이션)이라고 함
// 자바 문법이며 코드에 대한 설정을 나타냄
// 원래 안해도 작동하지만
// 얘는 언제 작동할지이기 때문에 없으면 작동하지 않음
@WebFilter("*.jsp")
public class EncFilter extends HttpFilter implements Filter {
	private String encoding;
       
    /**
     * @see HttpFilter#HttpFilter()
     */
    public EncFilter() { // 기본 생성자
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		request.setCharacterEncoding(this.encoding);
		// 하드코딩 : 유지보수 불리 ---> 상수화
		// ---> 설정 파일 생성해서 헤당 파일 로드 후 불러와서 사용
		
		
		System.out.println("인코딩 필터 doFilter 로그");
		
		chain.doFilter(request, response);
		// == 사용자의 요청
		// 사용자의 모든 요청이 담겨있음
		// 사용자의 요청정보들을 보고 어디서 무엇을 요청했는지 찾아서 다음페이지로 이동하기 때문에
		// 이동전에 인코딩해야 함
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		System.out.println("인코딩 필터 init 로그");
		this.encoding = fConfig.getServletContext().getInitParameter("encoding"); // 멤버변수 초기화
	}

}

 

web.xml

톰캣 서버가 자동적으로 읽는 설정 파일로 인코딩 설정을 하드코딩한 것이 아닌

.xml 파일에 코딩할시 수정시에 재컴파일이 필요하지 않고 서버의 중단이 없기 때문에

외부 파일로 인코딩 설정을 하였다

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

<context-param>
	<param-name>encoding</param-name>
	<param-value>UTF-8</param-value>
</context-param>

</web-app>

 

728x90
반응형

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

[Web] day47 : JSP 프레임워크 구조 적용하기(FrontController 패턴)  (0) 2023.08.07
[Web] day44 : 리스너  (0) 2023.08.06
[Web] day43 : POJO와 NOT POJO  (0) 2023.08.06
[Web] day43 : 커스텀태그  (0) 2023.08.05
[Web] day42 : EL 표현식  (0) 2023.08.05
Comments