当前位置: 首页 > 面试题库 >

特定于请求参数的Java过滤器URL模式

海叶秋
2023-03-14
问题内容

我们遇到一种情况,我们想对包含某些特定请求参数的URL使用过滤器,例如:

http://mydomain.com/?id = 78&formtype = simple_form&......。    
http://mydomain.com/?id = 788&formtype = special_form&......。

等等,id都是在运行时牵强,我想配置过滤器,web.xml只有当formtype=special_form。应该如何解决?可以使用正则表达式模式配置Filter吗?


问题答案:

据我所知,尚无解决方案可直接在中通过查询字符串将请求匹配到过滤器web.xml。因此,您可以在web.xml使用init-
params的情况下注册过滤器,以使过滤器可配置,并void init(FilterConfig filterConfig)javax.servlet.Filter实现中设置模式。

package mypackage;

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;
import javax.servlet.http.HttpServletRequest;

public class MyFilter implements Filter {

    private String pattern;

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // check whether we have a httpServletRequest and a pattern
        if (this.pattern != null && request instanceof HttpServletRequest) {
            // resolve the query string from the httpServletRequest
            String queryString = ((HttpServletRequest) request).getQueryString();
            // check whether a query string exists and matches the given pattern
            if (queryString != null && queryString.matches(pattern)) {
                // TODO do someting special
            }
        }
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.pattern = filterConfig.getInitParameter("pattern");
    }

}

您的web.xml中的配置如下所示:

<!-- MyFilter -->
<filter>
    <filter-name>myFilter</filter-name>
    <filter-class>mypackage.MyFilter</filter-class>
    <init-param>
        <param-name>pattern</param-name>
        <param-value>{{PATTERN HERE}}</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
进一步阅读: http
//java.sun.com/javaee/5/docs/api/javax/servlet/Filter.html


 类似资料:
  • 问题内容: 现有的Web应用程序正在Tomcat 4.1上运行。页面存在XSS问题,但是我无法修改源代码。我决定编写一个servlet过滤器以在页面看到参数之前对其进行清理。 我想这样编写一个Filter类: 但是ServletRequest.setParameter不存在。 在将请求向下传递之前,如何更改请求参数的值? 问题答案: 如前所述,没有setParameter方法。这是故意的,因为该类

  • 编辑-过滤器用于缓存响应。我需要缓存AJAXHandler转发到的各个servlet的响应,而不是AJAXHandler本身最终返回的捆绑响应。

  • 当我从discord服务器收到请求时,它会发送如下内容: null 当我运行它时,终端给我&LTResponse[404&>;,这似乎是错误本身的代码,但我希望代码输出消息参数的内容 我为一个可能愚蠢的问题提前道歉。

  • 问题内容: 我正在为CrawlSpider使用scrapy为网站编写爬虫。 Scrapy提供了一个内置的重复请求过滤器,该过滤器根据URL过滤重复请求。另外,我可以使用CrawlSpider的规则成员过滤请求。 我想要做的是过滤请求,例如: 如果我已经去过 注意: refer是一个不会影响我得到的响应的参数,所以我不在乎该参数的值是否发生变化。 现在,如果我有一个集合所有ID的集合,则可以在我的回

  • 泽西应用编程接口中是否有任何注释可用于实现基于头值的请求过滤?同样的情况在Spring like中实现 @RequestMapping(value=“/test”,method=RequestMethod.POST,headers={“version=v1.1”})

  • 问题内容: 我正在寻找一种简洁的方法来过滤特定索引处的列表中的项目。我的示例输入如下所示: 我想在指标筛选出的项目,,,。我有一个for循环,它跳过与索引匹配的项目,但我希望可以有一种使用流的简单方法。最终结果将如下所示: 问题答案: 您可以生成一个模拟原始列表的索引,然后删除列表中的索引,然后将这些索引映射到列表中的相应元素(一种更好的方法是使用for索引,因为它们是唯一的定义,以便进行恒定时间