栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

解决springboot中配置过滤器以及可能出现的问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解决springboot中配置过滤器以及可能出现的问题

在springboot添加过滤器有两种方式:

1、通过创建FilterRegistrationBean的方式(建议使用此种方式,统一管理,且通过注解的方式若不是本地调试,如果在filter中需要增加cookie可能会存在写不进前端情况)

2、通过注解@WebFilter的方式

通过创建FilterRegistrationBean的方式创建多个filter以及设置执行顺序:

1、创建两个实现Filter接口的类TestFilter1 、TestFilter2

package com.aoxun.core.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class TestFilter1 implements Filter {

 @Override
 public void init(FilterConfig filterConfig) throws ServletException {}

 @Override
 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  throws IOException, ServletException {
 chain.doFilter(request, response);
 }

 @Override
 public void destroy() {}

}
package com.aoxun.core.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class TestFilter2 implements Filter {

 @Override
 public void init(FilterConfig filterConfig) throws ServletException {}

 @Override
 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  throws IOException, ServletException {
 chain.doFilter(request, response);
 }

 @Override
 public void destroy() {}

}

2、创建配置类

有多个filter就创建多个FilterRegistrationBean ,若需注明filter的执行顺序,可通过registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE - 1)配置,值越大,执行顺序越靠后

package com.aoxun.config.web;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.aoxun.core.filter.TestFilter1;
import com.aoxun.core.filter.TestFilter2;


@Configuration
public class FilterConfig2 {

 @Bean
 public FilterRegistrationBean companyUrlFilterRegister() {
 FilterRegistrationBean registration = new FilterRegistrationBean();
 //注入过滤器
 registration.setFilter(new TestFilter1());
 //拦截规则
 registration.addUrlPatterns("
@RestController
public class DemoController {
 
 // 带参GET请求: http://localhost:8080/demo/get/param?param=111222333444
 @RequestMapping(value = "/demo/get/param", method = RequestMethod.GET)
 public String getParam(@RequestParam(value = "param") String param) {
  System.out.println("=====>进入DemoController /demo/get/param");
  return "/demo/get/param," + param;
 }
}

第二步:使用@WebFilter注解方式,实现Filter过滤器

当使用@WebFilter、@WebServlet、@WebListener等注解时, 需要在springboot启动类中启用@ServletComponentScan注解指定扫描包。

package com.oysept.filter; 
import java.io.IOException;
import java.util.Enumeration; 
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; 
import org.springframework.core.env.Environment;
import org.springframework.web.filter.OncePerRequestFilter;
 

@WebFilter(value = "
@Component
public class PathFilter implements Filter {
 
 @Override
 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
   throws IOException, ServletException {
  // 转换
  HttpServletRequest request = (HttpServletRequest) servletRequest;
  HttpServletResponse response = (HttpServletResponse) servletResponse;
  System.out.println("====>进入PathFilter doFilter过滤器====");
 
  System.out.println("====>结束PathFilter doFilter过滤器====");
  filterChain.doFilter(request, response);
 }
}

第四步:通过@Bean注解方式,实现Filter过滤器

@Configuration注解:相当于spring中的标签

@Bean注解:相当于spring中标签

package com.oysept.config; 
import java.io.IOException; 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 

@Configuration
public class MyFilterConfig {
 
 @Bean
 public FilterRegistrationBean testFilterRegistration() {
  FilterRegistrationBean registration = new FilterRegistrationBean<>();
  registration.setFilter(new MyFilter());
  registration.addUrlPatterns("
@SpringBootApplication
@ServletComponentScan(basePackages = "com.oysept.filter")
public class FilterApplication {
 
 public static void main(String[] args) {
  new SpringApplicationBuilder(FilterApplication.class).run(args);
 }
}

启动main方法,在浏览器输入地址:http://localhost:8080/demo/get/param?param=111222333444

在控制台查看打印日志:

项目结构图:

以上这篇解决springboot中配置过滤器以及可能出现的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/131758.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号