로그인 필터 기능 구현하기 (23.08.16)

·2023년 8월 16일
0

Spring

목록 보기
8/36
post-thumbnail

🌷 로그인 필터

💭 로그인 필터의 역할은 무엇일까?

로그인 필터가 없다면 로그인하지 않은 회원이 마이 페이지의 주소를 주소창에 입력하여 회원이 아님에도 접근할 수가 있다.
이를 방지하기 위해 로그인 회원만 마이 페이지에 접근할 수 있도록 로그인 필터를 추가해 주자. 👍


👀 코드로 살펴보기

🌱 LoginFilter.java

package edu.kh.project.common.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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import edu.kh.project.member.model.dto.Member;

// Filter : 클라이언트의 요청/응답을 걸러내거나 첨가하는 클래스

// 클라이언트 <-> Filter <-> DispatcherServlet

// @WebFilter : 해당 클래스를 필터로 등록하고, 지정된 주소로 요청이 올 때마다 동작

@WebFilter(filterName="loginFilter",
			urlPatterns = {"/myPage/*"})
public class LoginFilter implements Filter {

	public void init(FilterConfig fConfig) throws ServletException {
		// 서버가 켜질 때나 필터 코드가 변경되었을 때 필터가 생성됨
		// -> 생성 시 초기화 용도로 사용하는 메소드
		System.out.println("--- 로그인 필터 생성 ---");
	}

	public void destroy() {
		// 필터 코드가 변경되었을 때
		// 변경 이전 필터를 파괴하는 메소드
		System.out.println("--- 이전 로그인 필터 파괴 ---");
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// 필터링 코드를 작성하는 메소드

		// 1) ServletRequest, ServletResponse 다운캐스팅
		HttpServletRequest req = (HttpServletRequest)request;
		HttpServletResponse resp = (HttpServletResponse)response;
		
		// 2) HttpServletRequest를 이용해서 HttpSession 얻어오기
		HttpSession session = req.getSession();
		
		// 3) session에서 "loginMember" key를 가진 속성을 얻어와
		//	  null인 경우 메인 페이지로 redirect 시키기
		
		/*
		Member loginMember = (Member)session.getAttribute("loginMember");
		
		if(loginMember.getAuthority() != 2) { // 관리자가 아니면 메인 페이지로
			resp.sendRedirect("/");
		}
		*/
		
		if(session.getAttribute("loginMember") == null) {
			resp.sendRedirect("/");
			
		} else {
			// 4) 로그인 상태인 경우 다음 필터 또는
			//	  DispatcherServlet으로 전달
			chain.doFilter(request, response);
		}
		
	}

}
profile
풀스택 개발자 기록집 📁

0개의 댓글