Java 在ServletRequest到达Servlet/Filter后从中删除查询字符串

Java 在ServletRequest到达Servlet/Filter后从中删除查询字符串,java,servlets,filter,query-string,Java,Servlets,Filter,Query String,现在假设我发射一些URL,比如说 http://shoaib:8080/userAuthentication?authenticate=false 现在当它到达过滤器的doFilter方法时 public void doFilter(request,response,filterChain){ boolean authenticate=request.getParameter("authenticate"); . . //some logic . .

现在假设我发射一些URL,比如说

http://shoaib:8080/userAuthentication?authenticate=false
现在当它到达过滤器的doFilter方法时

public void doFilter(request,response,filterChain){

   boolean authenticate=request.getParameter("authenticate");
   .
   .   //some logic
   .
   .
   filterChain.doFilter(request,response); //this request should not have query String.

} 

将传递给
filterChain的doFilter()
的请求不应具有queryString。如何实现这一点?

我正在考虑覆盖过滤方法:

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
    throws ServletException, IOException {
    HttpServletRequest request = (HttpServletRequest) req;
    String requestURI = request.getRequestURI();

    if (requestURI.startsWith(YOUR_CHECK_PATH)) {
       String url = ((HttpServletRequest)request).getRequestURL().toString();
       String queryString = ((HttpServletRequest)request).getQueryString();
        req.getRequestDispatcher(url).forward(req, res);
    } else {
        chain.doFilter(req, res);
    }
}

我尝试了很多,但最后我使用window.location对象更改了客户端的url

上一条路径:

http://shoaib:8080/userAuthentication?authenticate=false
客户端代码

window.location.pathname="userAuthentication";
这删除了以前的查询字符串

当前URL

http://shoaib:8080/userAuthentication

但是请求是否仍然具有查询字符串?因此,现在,如果下次调用request.getQueryString(),它应该为null。我想这不是一个答案,对此我不确定。但这行得通吗?Map params=request.getParameterMap();参数删除(“要删除的参数”)`我认为它不会像HTTP Status 500那样工作-不允许修改锁定的ParameterMap