補助フィルタ
基礎科目の金英漢のhttps://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard課を見ました
フィルタフィルタはサーブレットによって提供される機能である. が共通に関心を持つ問題を解決するためには、HTTPのヘッダまたはURL情報が必要であり、フラットパネルフィルタまたはスプリングインタフェースは、HttpServeretRequestを提供する. 補助フィルタ水門フィルターは、ゲート長の役割を担う機能です. フィルタフロー
HTTPリクエスト>WAS>フィルタ>サーバ(派遣サーバ)>コントローラ
フィルタ制限
HTTPリクエスト>WAS>フィルタ>サーブレット>コントローラ//ログインユーザー
HTTPリクエスト>WAS>フィルタ(サーブレット呼び出しXと呼ばれる不適切なリクエストとみなされる)/非ログインユーザ.
フィルタチェーン
HTTPリクエスト>WAS>フィルタ1>フィルタ2>フィルタ3>テンプレート>コントローラフィルタはチェーンからなり、その間にフィルタを自由に追加することができる.たとえば、ログ保存では、フィルタを最初に適用し、ログインするかどうかを確認するフィルタを作成できます. フィルタインタフェースサーボコンテナ単調オブジェクトとしてフィルタを作成および管理します. init():サーバコンテナの作成時に呼び出されるフィルタ初期化方法. doFilter():このメソッドは、お客様が要求するたびに呼び出されます.フィルタの論理を実現すればいい. destory():フィルタ終了メソッドは、サーバコンテナが閉じたときに呼び出されます. サービス・フィルタ-要求ログ
ログインチェックフィルタの作成
フィルタ
HTTPリクエスト>WAS>フィルタ>サーバ(派遣サーバ)>コントローラ
フィルタ制限
HTTPリクエスト>WAS>フィルタ>サーブレット>コントローラ//ログインユーザー
HTTPリクエスト>WAS>フィルタ(サーブレット呼び出しXと呼ばれる不適切なリクエストとみなされる)/非ログインユーザ.
フィルタチェーン
HTTPリクエスト>WAS>フィルタ1>フィルタ2>フィルタ3>テンプレート>コントローラ
public interface Filter {
public default void init(FilterConfig filterConfig) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException;
public default void destroy() {}
}
@Slf4j
public class LogFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("log filter init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
log.info("log filter doFilter");
// 기능이 많지 않기때문에 다운캐스팅
HttpServletRequest httpRequest = (HttpServletRequest) request;
String requestURI = httpRequest.getRequestURI();
String uuid = UUID.randomUUID().toString();
try{
log.info("REQUEST [{}{}]", uuid, requestURI);
// 다음필터를 호출한다.
chain.doFilter(request,response);
}catch (Exception e){
throw e;
}finally {
log.info("RESPONSE [{}{}]", uuid, requestURI);
}
}
@Override
public void destroy() {
log.info("log filter destroy");
}
}
テンプレートフィルタスプリングに追加@Configuration
public class WebConfig implements WebMvcConfigurer {
public FilterRegistrationBean logFilter() {
FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<>();
filterFilterRegistrationBean.setFilter(new LogFilter()); // 만든 필터 넣어주고
filterFilterRegistrationBean.setOrder(1); // 필터 우선순위 정해주고
filterFilterRegistrationBean.addUrlPatterns("/*"); // 모든 경로에 다 적용한다.
return filterFilterRegistrationBean;
}
}
logback mdcも検索してみましょうログインチェックフィルタの作成
@Slf4j
public class LoginFilter implements Filter {
// 들어올수 있는 경로
private static final String[] whiteList = {"/", "/members/add", "/login", "/logout", "/css/*"};
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String requestURI = httpServletRequest.getRequestURI();
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
try{
log.info("인증체크 필터 시작 {}",requestURI);
if(isLoginCheckPath(requestURI)) {
log.info("인증 체크 로직 실행 {}", requestURI);
HttpSession session = httpServletRequest.getSession(false);
if (session == null || session.getAttribute(SessionConst.LOGIN_MEMBER)==null) {
log.info("미인증 사용자가 요청했다 !{}", requestURI);
// 로그인으로 리다이렉트
httpServletResponse.sendRedirect("/login?redirectURL=" + requestURI);
return ;
}
}
chain.doFilter(request,response);
}catch (Exception e) {
throw e;
} finally {
log.info("인증체크 필터 종료 {}", requestURI);
}
}
/**
* 화이트 리스트의 경우 인증체크 X
*/
private boolean isLoginCheckPath(String requestURI) {
return !PatternMatchUtils.simpleMatch(whiteList, requestURI);
}
@Override
public void destroy() {
Filter.super.destroy();
}
}
redirectセクションでは、コントローラから@requestParam(defaultValue="/")StringリダイレクトURLパラメータを受信して処理する必要があります.Reference
この問題について(補助フィルタ), 我々は、より多くの情報をここで見つけました https://velog.io/@gudnr1451/서블릿-필터テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol