过滤器
1.filter生命周期
package com.wang.filter;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;
public class FilterPrimary implements Filter {
private FilterConfig filterConfig;
public FilterPrimary() {
System.out.println("创建filter");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
System.out.println("初始化");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
String filterName = filterConfig.getFilterName();
System.out.println("filterName- - - >" + filterName);
Enumeration<String> initParameterNames = filterConfig.getInitParameterNames();
while (initParameterNames.hasMoreElements()){
String key = initParameterNames.nextElement();
String value = filterConfig.getInitParameter(key);
System.out.println("name - - " + key + " value - - >" +value);
}
ServletContext servletContext = filterConfig.getServletContext();
System.out.println("servletContext" + servletContext);
// 将请求放行到下一个资源
System.out.println("之前");
filterChain.doFilter(request,response);
System.out.println("之后");
}
@Override
public void destroy() {
System.out.println("销毁");
}
}
用于注册Filter
package com.wang.config;
import com.wang.filter.FilterPrimary;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Collection;
@Configuration
public class MyFilter {
@Bean
public FilterRegistrationBean getFilterRegistrationBean(){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>();
// 设置自定义过滤器
filterRegistrationBean.setFilter(new FilterPrimary());
//通过addUrlPatterns("/*")配置,该过滤器将会拦截所有的请求,并执行其中定义的逻辑。
filterRegistrationBean.addUrlPatterns("/*");
// filterRegistrationBean.addServletNames("/hello");
filterRegistrationBean.addInitParameter("my111","123123");
Collection urlPatterns = filterRegistrationBean.getUrlPatterns();
urlPatterns.stream().forEach(System.out::println);
// filterRegistrationBean.setDispatcherTypes(DispatcherType.ASYNC);
return filterRegistrationBean;
}
}
拦截器
package com.wang.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("放行了.....");
return true; // 是否放行
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("123456456");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("aaaaaaaaaaaaaaaaaaaa");
}
}
注册拦截器
package com.wang.config;
import com.wang.interceptor.MyInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration interceptor = registry.addInterceptor(new MyInterceptor());// 注册拦截器
interceptor.addPathPatterns("/*"); // 所有请求拦截
}
}