Spring-将每个网址映射的参数发送到同一过滤器

时间:2019-05-23 11:57:29

标签: java spring servlet-filters

我在Tomcat上部署了Spring应用程序,

我要添加一个OncePerRequestFilter

@Component
public class MyFilter extends OncePerRequestFilter {
    private String id;    
    private static final Logger logger = Logger.getLogger(MyFilter.class);
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
       logger.debug("Filter id: " + id);

特定网址

FilterRegistration myFilter = servletContext.addFilter("myFilter ", MyFilter.class);
myFilter.addMappingForUrlPatterns(null, false, "/myservlet/myendpoint/*");
myFilter.addMappingForUrlPatterns(null, false, "/myservlet/myendpoint2/*");
myFilter.addMappingForUrlPatterns(null, false, "/myservlet/myendpoint3/*");

我希望使用相同的类对不同的URL映射使用不同的行为,因此我需要发送参数(例如String),该参数将在Filter类中可用并执行不同的检查,这可以使用当前配置来完成吗?

我尝试添加init parameter,但在过滤器中ID为null

myFilter.setInitParameter("id", "1");

1 个答案:

答案 0 :(得分:1)

我可以想到2种选择:

  1. 选项1 : 基本上,您需要覆盖 public void initFilterBean() 并设置Bean属性

  2. 选项2 :MyFilter组件是Spring完全管理的bean,因此另一种设置id属性的方法是将其用作 属性(为您的my-filter.id指定一个属性值 应用程序属性文件,要使其正常工作,您需要获取 Spring中对myFilter实例的引用 ApplicationContext容器)

    @Value("my-filter.id") 
    private String id;