[Spring] 필터(filter)

2024. 12. 3. 08:48·Spring
목차
  1. init
  2. doFilter
  3. destroy
반응형

pom.xml 수정

<!-- Servlet -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

 
 
servlet-context.xml

<context:component-scan base-package="edu.springboard.filter" />

 
 
 

package edu.springboard.filter;

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 org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Order(1) //여러개의 필터 중 실행 순서 지정
@WebFilter({"/board/writeOk.do","/join.do"}) 
//해당 어노테이션으로 자동으로 filter 적용 web.xml 작업 없음
@Component
public class ContentFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		//경로 지정시 하나의 가상 경로에 대한 get,post를 구분할 수 없으므로 
		//하나의 가상경로에서 post만 필터를 적용할 수 없다
		
		
		String title = request.getParameter("title");
		title = title.replaceAll("<", "&lt;");
		title = title.replaceAll(">", "&gt;");
		
		request.setAttribute("title", title);
		
		
		System.out.println("Filter request title =>" + title);
		String content = request.getParameter("content");
		content = content.replaceAll("<", "&lt;");
		content = content.replaceAll(">", "&gt;");
		content = content.replaceAll("\n", "<br>");
		
		
		
		request.setAttribute("content", content);
		
		
		System.out.println("Filter request content =>" + content);
		
		
		chain.doFilter(request, response); //다음 요청으로 전달
	}

	@Override
	public void destroy() {
		
	}
	
}

 
 

@WebFilter("/board/**") //단일 경로 매핑
@WebFilter(urlPatterns = "/board/**") //단일 경로 매핑 
@WebFilter(urlPatterns = "/board/**","/free/**") //여러 경로 매핑

 
 

init

  • 설명: 필터가 처음 생성될 때 단 한 번만 호출됩니다.
  • 주요 목적:
    • 초기화 작업 수행.
    • 설정값 읽기 또는 리소스 할당 등 초기 설정.
    • FilterConfig 객체를 통해 서블릿 컨테이너의 설정 정보를 가져올 수 있음.
  • 특징:
    • 필터 객체는 서블릿 컨테이너에서 인스턴스화되며, 필터의 생애 주기 동안 이 메서드는 단 한 번 실행됩니다.

 

doFilter

  • 설명: 클라이언트 요청이 필터를 통과할 때마다 호출됩니다.
  • 주요 목적:
    • 요청(request) 또는 응답(response) 가공.
    • 요청 처리 전/후의 추가 로직 실행.
    • 필터 체인(FilterChain)을 통해 다음 필터 또는 서블릿으로 요청 전달.
  • 특징:
    • HTTP 메서드(GET, POST 등)에 따라 별도로 동작하도록 설정할 수 없습니다.
    • 하나의 경로에 대해서 모든 HTTP 메서드에 필터가 적용됩니다.
    • 특정 메서드에 대해 필터를 적용하려면 **HttpServletRequest의 getMethod()**를 사용해 조건문으로 처리해야 합니다.

destroy

  • 설명: 필터 객체가 소멸될 때 호출됩니다.
  • 주요 목적:
    • 리소스 해제 또는 정리 작업 수행.
    • 데이터베이스 연결 종료, 파일 스트림 닫기 등.
  • 특징:
    • 서블릿 컨테이너가 종료되거나 필터가 제거될 때 호출됩니다.

 
 
 

@RequestMapping(value="/board/writeOk.do", method = RequestMethod.POST)
public String write(NoticeVO noticeVO,HttpServletRequest request) {

    HttpSession session = request.getSession();

    noticeVO.setUno(((UserVO)session.getAttribute("loginUser")).getUno());


    noticeVO.setTitle((String)request.getAttribute("title"));
    noticeVO.setContent((String)request.getAttribute("content"));


    int result = noticeService.insert(noticeVO);

    if(result > 0) {
        System.out.println("글등록완료");
        /* int nno = noticeService.selectLast(); */
        System.out.println("nno:"+noticeVO.getNno());
        return "redirect:view.do?nno="+noticeVO.getNno();
    }else {
        System.out.println("글등록실패");
        return "redirect:write.do";
    }

}

 
 

 
 
 
 
 
 
 
 

반응형

'Spring' 카테고리의 다른 글

[Spring] 스케줄러(Scheduler),시큐리티(Security)  (1) 2024.12.04
[Spring] 인터셉터(interceptor)  (0) 2024.12.02
[Spring] 파일 업로드  (0) 2024.12.01
[Spring] AJAX 여러건의 데이터 받기  (0) 2024.11.30
[Spring] AJAX 한 건의 데이터 받기  (1) 2024.11.29
  1. init
  2. doFilter
  3. destroy
'Spring' 카테고리의 다른 글
  • [Spring] 스케줄러(Scheduler),시큐리티(Security)
  • [Spring] 인터셉터(interceptor)
  • [Spring] 파일 업로드
  • [Spring] AJAX 여러건의 데이터 받기
초보개발자J
초보개발자J
초보개발자J
J의 코딩 노트
초보개발자J
전체
오늘
어제
  • 분류 전체보기 (126)
    • Java (49)
    • MySQL (10)
    • HTML, CSS (8)
    • JavaScript, jQuery, Ajax (12)
    • Spring (15)
    • Python (0)
    • Baekjoon [Java] (27)
    • Git (1)
    • Spring Boot (3)
    • Visual Studio Code (1)
    • 일상 (0)
    • 영어 (0)
반응형

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

hELLO· Designed By정상우.v4.5.3
초보개발자J
[Spring] 필터(filter)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.