定義Filter
public class CsrfFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
// 過濾掉不合法的請求寞冯,只允許get或post
// 校驗Referer頭体斩,運管所管理的服務器過來才合法
// 校驗Host頭遵堵,防止http host頭攻擊
}
@Override
public void init(FilterConfig arg0) throws ServletException {
l
}
通過Bean配置
Spring 提供了FilterRegistrationBean類箱玷,此類提供setOrder方法,可以為filter設置排序值陌宿,
讓spring在注冊web filter之前排序后再依次注冊锡足。
@Bean
public FilterRegistrationBean csrfFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(csrfFilter());
registration.addUrlPatterns("/*");
registration.setName("csrfFilter");
registration.setOrder(-200);//指定執(zhí)行的順序
return registration;
}
通過注解配置
直接用@WebFilter就可以進行配置,同樣壳坪,可以設置url匹配模式舶得,過濾器名稱等。這里需要注意一點的是@WebFilter這個注解是Servlet3.0的規(guī)范爽蝴,并不是Spring boot提供的沐批。除了這個注解以外,我們還需在配置類中加另外一個注解:@ServletComponetScan蝎亚,指定掃描的包九孩。
@Component
@WebFilter(urlPatterns = "/webapi/*", filterName = "authFilter")
public class AuthFilter implements Filter {
......
}
@WebFilter這個注解并沒有指定執(zhí)行順序的屬性,其執(zhí)行順序依賴于Filter的名稱颖对,是根據(jù)Filter類名(注意不是配置的filter的名字)的字母順序倒序排列捻撑,并且@WebFilter指定的過濾器優(yōu)先級都高于FilterRegistrationBean配置的過濾器。