在 Java 过滤器中获取配置的 url 模式 [重复]
Posted
技术标签:
【中文标题】在 Java 过滤器中获取配置的 url 模式 [重复]【英文标题】:Get configured url patterns in a Java Filter [duplicate] 【发布时间】:2015-09-11 17:31:03 【问题描述】:我找不到在过滤器中获取 url 映射信息的方法。
例如,web.xml:
<filter>
<filter-name>someFilter</filter-name>
<filter-class>com.xxx.filter.SomeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>someFilter</filter-name>
<url-pattern>/ws/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>someFilter</filter-name>
<url-pattern>/rest/*</url-pattern>
</filter-mapping>
然后在 SomeFilter 中,我想获取映射列表 ["/ws/","/rest/"]。有没有办法得到它?
@Override
public void init(FilterConfig filterConfig)
filterConfig.getXXX() // -> ["/ws/*","/rest/*"]???
【问题讨论】:
一个问题,为什么需要知道映射列表? @jWeaver 这个问题和你建议的无关... 为什么所有这些人都将其标记为 dup? 提到的问题是关于在 web.xml 中配置 url 模式。这个问题是关于在 Java 代码中读取该配置的。所提到的问题只有 XML 示例而没有 Java 代码这一事实应该是一个很大的暗示,表明这个问题不是重复的。 【参考方案1】:Filterconfig 是每个过滤器,并且只知道该过滤器。 不确定意图,但要读取 URL,您可以简单地读取 web.xml 并使用文件读取方法搜索过滤器 URL 模式
【讨论】:
【参考方案2】:这并不完美,但尝试将它们定义为过滤器内的init param,然后从代码中读取init-param
<filter>
<filter-name>someFilter</filter-name>
<filter-class>com.xxx.filter.SomeFilter</filter-class>
<init-param>
<param-name>someFilter</param-name>
<param-value>/ws/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>someFilter</filter-name>
<url-pattern>/ws/*</url-pattern>
</filter-mapping>
过滤器类:
FilterConfig config;
public void init(FilterConfig config) throws ServletException
this.config=config;
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException
String s=config.getInitParameter("someFilter");
尝试将其应用于每个过滤器,然后将所有值存储在应用程序中的其他变量中,但如果您在应用程序中使用了一个过滤器,这将对您有所帮助。
【讨论】:
重点是我需要知道url-pattern
中配置的url列表
感谢您的建议,我已经想到了。然而,这是一种解决方法。我想知道是否有一个标准的方法来实现这一点。以上是关于在 Java 过滤器中获取配置的 url 模式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security 3 自定义过滤器和 URL 模式
java 中使用filter控制登录 其web.xml 配置了<url-pattern>/*</url-pattern> 但是不能正常过滤一些url