카테고리 없음

(Spring) filter , 필터

kakk789 2022. 6. 20. 13:48

filter

  • 웹 어플리케이션에서 사용자의 요청을 가로채어 먼저 동작하여 흐름을 제어하기 위한 용도로 사용
  • 예시 : 어떤 흐름이냐면 어떤 서비스를 이용할 때 Login을 꼭 진행하도록 함
  • 인증 / 인가(role)를 나눌 수 있음 (Spring Security를 수동으로 하는 느낌)

doFilter() 함수에서 흐름제어를 해야함 (LoginFilter.java)

- 현재 세션을 getSession()으로 가져와야 하는데 ServletRequest에는 getSession()이 없으므로
HttpServletRequest로 Type Casting 후 getSession() 사용하여 현재 로그인 한 id 세션 가져와 흐름제어 할 것임
- 23번째에 줄에 namespace에서 실수가 많으니 주의할 것 (서비스 요청 할 때 '프로젝트 이름/서비스do' 
//admin에 있는 모든 요청
@WebFilter("/admin/*")
public class LoginFilter extends HttpFilter implements Filter {
						// ...
						// ...
						// ...
	public void doFilter(ServletRequest request, 
						ServletResponse response, 
						FilterChain chain
						)throws IOException, ServletException {
		
		System.out.println("필터가 동작함");
		
		//세션에 로그인 정보를 받아와서 로그인하지 않았으면 로그인 한데로 보내고
		// 로그인 했으면 조건에 부합하는 곳으로 보낸다
		HttpSession session = ((HttpServletRequest)request).getSession();
		String id = (String)session.getAttribute("id");
		if(id!=null) {
			//로그인 성공 시 doFilter 실핼
			chain.doFilter(request, response);
		}
		else {
			((HttpServletResponse)response).sendRedirect("/boardTest/login.do");

		}
	}
						// ...
						// ...
						// ...
}
반응형