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 |