Springboot 2(7)カスタムFilter(フィルタ)を簡単に作成
15169 ワード
フィルタ
フィルタ
sprinbootには2つの実装方法があります
1. @WebFilte
フィルタURLの実装を無視
CustomFilterクラスに
正しい方法起動クラスに
@WebFilter共通プロパティ
ツールバーの
を選択します.
必要かどうか
説明
asyncSupported
boolean
いいえ
Filterが非同期モードをサポートするかどうかを指定します
dispatcherTypes
DispatcherType[]
いいえ
Filterがどの方式のリクエストをフィルタするかを指定します.サポートする属性:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST;すべてのメソッドをデフォルトでフィルタするリクエスト
filterName
String
いいえ
Filter名
initParams
WebInitParam[]
いいえ
構成パラメータ
displayName
String
いいえ
Filter表示名
servletNames
String[]
いいえ
どのサーブレットをフィルタするかを指定します
urlPatterns/value
String[]
いいえ
2つのアトリビュートは同じ役割を果たし、ブロックするパスを指定します.
2.FilterRegistrationBean方式
2つのステップ:はFilterインタフェースを実現し、Filte を実現する.@Configuration注記を追加し、カスタムFilterをフィルタチェーン に追加
複数のfilterがある場合は、
フィルタ
Filter
は、Servlet
の実用的な技術です.フィルタを使用して、セッションを読み込み、ユーザーがログインしているかどうかを判断したり、アクセスしている**リクエストURLにアクセス権限(白黒リスト)**があるかどうかを判断したりするなど、リクエストをブロックできます.主にリクエストを前処理することもできます.次に、springboot
でフィルタ機能を実現する方法について説明します.sprinbootには2つの実装方法があります
1. @WebFilte
@WebFilte
rによる注記構成// customFilter, url
@WebFilter(filterName="customFilter",urlPatterns={"/*"},
initParams = {
@WebInitParam(name = "excludeUrl", value = "/exclude")
})
@Slf4j
@Order(5)
public class CustomFilter implements Filter {
private String exclusions = null;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
exclusions = filterConfig.getInitParameter("excludeUrl");
// ,
log.info("filter ,excludeUrl:"+exclusions);
}
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
log.info(request.getRequestURI());
if (request.getRequestURI().equals(exclusions)) {
filterChain.doFilter(servletRequest, servletResponse);
return;
}
log.info("CustomFilter ");
log.info(" :"+request.getRequestURL());
// request、response
//
// servletRequest.setCharacterEncoding("UTF-8");
// servletResponse.setCharacterEncoding("UTF-8");
//
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
log.info("filter ");
}
}
フィルタURLの実装を無視
CustomFilterクラスに
@Component
、@Configuration
を追加してfilterに注入することができますが、この方法ではinitParams
に設定された値が得られません.正しい方法起動クラスに
@ServletComponentScan
を追加@WebFilter共通プロパティ
ツールバーの
を選択します.
必要かどうか
説明
asyncSupported
boolean
いいえ
Filterが非同期モードをサポートするかどうかを指定します
dispatcherTypes
DispatcherType[]
いいえ
Filterがどの方式のリクエストをフィルタするかを指定します.サポートする属性:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST;すべてのメソッドをデフォルトでフィルタするリクエスト
filterName
String
いいえ
Filter名
initParams
WebInitParam[]
いいえ
構成パラメータ
displayName
String
いいえ
Filter表示名
servletNames
String[]
いいえ
どのサーブレットをフィルタするかを指定します
urlPatterns/value
String[]
いいえ
2つのアトリビュートは同じ役割を果たし、ブロックするパスを指定します.
2.FilterRegistrationBean方式
2つのステップ:
@Slf4j
public class MyFilter implements Filter {
@Override
public void init(FilterConfig arg0) throws ServletException {
log.info(" MyFilter");
}
@Override
public void doFilter(ServletRequest srequest, ServletResponse sresponse,
FilterChain filterChain)
throws IOException, ServletException {
// TODO Auto-generated method stub
log.info("MyFilter ");
HttpServletRequest request = (HttpServletRequest) srequest;
filterChain.doFilter(srequest, sresponse);
}
}
@Configuration
public class WebConfiguration {
@Bean
public RemoteIpFilter remoteIpFilter() {
return new RemoteIpFilter();
}
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new MyFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("MyFilter");
registration.setOrder(1);
return registration;
}
}
複数のfilterがある場合は、
registration.setOrder(1)
または@Order(5)
により実行順序が設定され、数値が小さいほど早く実行される.