개발자 성장 일지

Filter

NEWDODORIPYO 2022. 4. 9. 21:02

Filter <필터>

Controller로 들어오기 전에 Filter에서 조건들을 주면 먼저 처리 후 Controller로 들어오게 된다

ex) 로그인 기능을 Filter에 넣어두면 Controller 들은 로그인 기능을 만들 필요가 없다 Filter에서 이미 확인 후에 들어오기 때문에

 

Filter 만들어보기

Class를 생성하기 전 보시면 Interfaces에 Filter을 추가해 주어야 합니다 Add로 들어가서

javax - servlet Filter을 선택해줍니다

 

코드로 보기 

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
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;

@WebFilter( urlPatterns = {"/todo/add"} )//이 url로 왔을때 필터를 정용해준다 
//urlPatterns 은 배열이다 
public class LoginCheckFilter implements Filter {

	@Override
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
			throws IOException, ServletException {
		
		System.out.println("-------------------"); //디버깅용
		System.out.println("LoginCheckFilter run.........");//디버기용ㅇ
		System.out.println("-------------------");//디버깅용
		
		HttpServletRequest request = (HttpServletRequest)req; //다운 캐스팅
		HttpServletResponse response = (HttpServletResponse)res; //다운 캐스팅
		
		HttpSession session = request.getSession();
		
		System.out.println("-----------------------");
		System.out.println(session.getAttribute("loginInfo"));
		//session이 isNew 새로만들어졌거나 get에서 가져온값이 null 이면 로그인 한적이 없다는 뜻 
		if(session.isNew() || session.getAttribute("loginInfo")==null) {
		System.out.println("이 사용사는 로그인 안된 사용자 ");
		
		//로그인 된적없으면 팅겨내기 
		response.sendRedirect("/login"); //sendRedirect 는 브라우저에서 get방식으로 호출함 
		return;
		}
		
		//필터를 통과해서 다음단계로 넘어가는 코드 
		chain.doFilter(req, res);
	}

}

⭐urlPatterns는 자주 사용하고 가장 중요한 키워드

 

다운 캐스팅 이유

HttpServletRequest request = (HttpServletRequest) req; 

HttpServletResponse response = (HttpServletResponse) res; 

 

다운 캐스팅을 해주는 이유는 위 코드를 보시면

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)

HttpServlet 이 아닌 Servlet으로만 선언되어 있기 때문

 

넘어가요~

로그인이 되어있는 경우가 아니면

//로그인 된적없으면 팅겨내기 
		response.sendRedirect("/login"); //sendRedirect 는 브라우저에서 get방식으로 호출함 
		return;

return;으로 구문이 종료되어 버리기 때문에

	//필터를 통과해서 다음단계로 넘어가는 코드 
		chain.doFilter(req, res);

다음으로 넘어가는 코드가 실행되지 못한다

'개발자 성장 일지' 카테고리의 다른 글

HTTPS 너 뭐하는 친구니?  (0) 2022.05.01
Spring transaction<트랜잭션>  (0) 2022.04.29
로그인...쿠키..세션  (0) 2022.04.09
ERD  (0) 2022.04.09
2022.04.05 인덱스 그리고 DB 설계  (0) 2022.04.05