국비 82 - 로그인 필터(스프링)

냐아암·2023년 8월 16일
0

국비

목록 보기
95/114

📍 로그인 여부, 관리자 여부 등 판별

LoginFilter

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) HttpServletReqeust를 이용해서 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("/");
			
			// 4) 로그인 상태인 경우 다음 필터 또는 
			//    DispatcherServlet으로 전달
		} else {
			chain.doFilter(request, response);
		}
		
	}

}
profile
개발 일지

0개의 댓글