
Fileter 만들기

implements Filter 해주기javax.servlet.Filter로 임포트 해야함.package org.fullstack4.chap1.filter;
import lombok.extern.log4j.Log4j2;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@Log4j2
@WebFilter(urlPatterns = {"/bbs/*"})
public class LoginCheckFilter implements Filter {
// 위 urlPatterns에 없어도 일단 필터는 다 들어오나, 해당 url인 경우만 실제 실행 됨.
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void destroy() {
Filter.super.destroy();
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
log.info("Login Check Filter");
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
HttpSession session = req.getSession();
if(session.getAttribute("user_id") == null) {
resp.sendRedirect("/member/login");
return;
}
chain.doFilter(req, resp);
}
}
💡 Filter 에 병목현상이 발생할 경우
톰캣 서버 실행로그를 확인해서, 실행 시간이 딜레이가 점점 쌓이게되는 경우가 발생할 수 있습니다. 이 때는 Filter 로직을 확인해야함.
Listener 만들기
ServletContextListener 클래스 구현하기
package org.fullstack4.chap1.listener;
import lombok.extern.log4j.Log4j2;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@Log4j2
@WebListener
public class F4AppListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
log.info("===========int===========");
ServletContext servletContext = sce.getServletContext();
servletContext.setAttribute("appName", "Fullstack4");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
log.info("===========destroyed===========");
}
}