拦截器
-
自定义一个拦截器实现HandlerInterceptor接口
spring 5以后的版本,要求Java版本最少是8的,会有一个新特性default默认方法,可以不全部覆盖 -
写一个配置类 要加上@Configuration注解 ,然后实现WebMvcConfigurer
就相当于一个spring的xml实现addInterceptors()方法
@Configuration//相当于是一个applicationContext-mvc.xml public class WebConfig implements WebMvcConfigurer { /** * 添加拦截器 * 拦截器的注册类 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { //拦截器需要拦截的路径 String[] pathPatterns = { "/**" }; //拦截器不需要拦截的路径 String[] excludePathPatterns ={ "/login", "/config" }; //LoginInterceptor() 自定义拦截器 registry.addInterceptor(new LoginInterceptor()).addPathPatterns(pathPatterns).excludePathPatterns(excludePathPatterns); } }
过滤器
- 方式一
-
自定义一个filter类,实现Filter类,并在自定义的filter类上加上@WebFilter(filterName=“MyFilter”,urlPatterns="/*")注解
//过滤路径 @WebFilter(filterName = "MyFilter",urlPatterns = "/*") public class MyFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("my filter ....... "); chain.doFilter(req, resp); } @Override public void init(FilterConfig config) throws ServletException { } }
-
在启动类上添加@ServletComponentScan(basePackages = {“com.diety.springboot.servlet”,“com.diety.springboot.filter”})扫描filter包
-
- 方式二
- 自定义一个普通的filter类,实现Filter类
- 编写一个配置类
@Configuration//相当于是一个applicationContext-mvc.xml public class WebConfig implements WebMvcConfigurer{ /** * *注册自定义的过滤器的第二种方式 * @return */ @Bean public FilterRegistrationBean heFilterRegistrationBean(){ //CommoneFilter()自定义过滤器 FilterRegistrationBean registration = new FilterRegistrationBean(new CommoneFilter()); registration.addUrlPatterns("/*"); return registration; } }
设置字符编码
- 第一种
@Configuration//相当于是一个applicationContext-mvc.xml public class WebConfig implements WebMvcConfigurer { /** * 注册一个字符编码过滤器 *spring 提供的 * 注:只有当spring.http.encoding.enabled=false配置成false后,过滤器才起作用 * @return */ @Bean public FilterRegistrationBean filterRegistrationBean(){ //创建一个spring提供的过滤器 CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); //强制编码 characterEncodingFilter.setForceEncoding(true); characterEncodingFilter.setEncoding("UTF-8"); //filter注册bean FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(characterEncodingFilter); //要过滤的路径 registrationBean.addUrlPatterns("/*"); return registrationBean; } }
- 第二种
在application.properties中配置字符编码设置#springboot 1.4.2开始提供这种方式的项目编码 spring.http.encoding.charset=utf-8 spring.http.encoding.enabled=true spring.http.encoding.force=true