如何在Java中使用Servlet过滤器来更改传入的Servlet请求网址?

弗兰克:

如何使用Servlet过滤器更改来自的传入Servlet请求网址

http://nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123

http://nm-java.appspot.com/Check_License?Contact_Id=My_Obj_123


更新:根据BalusC的以下步骤,我想到了以下代码:

public class UrlRewriteFilter implements Filter {

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

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

        if (requestURI.startsWith("/Check_License/Dir_My_App/")) {
            String toReplace = requestURI.substring(requestURI.indexOf("/Dir_My_App"), requestURI.lastIndexOf("/") + 1);
            String newURI = requestURI.replace(toReplace, "?Contact_Id=");
            req.getRequestDispatcher(newURI).forward(req, res);
        } else {
            chain.doFilter(req, res);
        }
    }

    @Override
    public void destroy() {
        //
    }
}

相关条目web.xml如下所示:

<filter>
    <filter-name>urlRewriteFilter</filter-name>
    <filter-class>com.example.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>urlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我尝试了服务器端和客户端重定向,均获得了预期的结果。它成功了,谢谢BalusC!

BalusC:
  1. 实施javax.servlet.Filter
  2. doFilter()方法中,将传入的内容强制转换ServletRequestHttpServletRequest
  3. HttpServletRequest#getRequestURI()抢的路径。
  4. 使用简单的java.lang.String方法,如substring()split()concat()等提取感兴趣的部分,构成了新的路径。
  5. 使用或ServletRequest#getRequestDispatcher()然后RequestDispatcher#forward()将请求/响应转发到新的URL(服务器端重定向,不反映在浏览器地址栏中),将传入的内容强制转换ServletResponseHttpServletResponse然后HttpServletResponse#sendRedirect()将响应重定向到新的URL(客户端重定向,反映在浏览器地址栏)。
  6. 注册过滤器web.xmlurl-pattern/*/Check_License/*根据上下文路径上,或者如果你是在Servlet的3.0已经使用了@WebFilter注解为代替。

不要忘记在代码中添加检查,如果需要更改URL ,如果不需要,则只需调用FilterChain#doFilter(),否则它将在无限循环中调用自身。

另外,您也可以只使用现有的第三方API为您完成所有工作,例如Tuckey的UrlRewriteFilter,可以像使用Apache的方式进行配置mod_rewrite

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java过滤器中更改servlet请求正文?

如何在Java中使用Jersey安全性注释绕过Servlet过滤器中的路径

使用Servlet过滤器修改请求参数

在Servlet过滤器中请求null

Servlet过滤器-来自Servlet的转发请求是否将进入Servlet过滤器?

Servlet与过滤器

如何在servlet过滤器中重定向?

如何在servlet过滤器中获取Spring bean?

如何在Eclipse中创建Servlet过滤器?

如何在早期的 servlet/spring boot 过滤器中强制结束过滤器链

Java servlet 过滤器参数

使用JSF的Servlet过滤器

Servlet过滤器与ServletRequestListener

保存并重用servlet过滤器中的请求?

如何在过滤器中使用数组中的值来减少重复代码

如何检查请求的 URL 是否是 servlet(在过滤器中)?

如何从POST请求中获取XML并在Servlet过滤器中对其进行修改?

如何在odoo中使用过滤器搜索更改选择字段?[Odoo 9]

我可以在 spring servlet 过滤器中使用 RequestHeader 注释吗?

如何在Java Servlet中使用Session?

如何在内部条件过滤器中使用过滤器?

如何在for中应用“过滤器过滤器”,而不是在Twig中使用“ if”

如何在过滤器数据表中使用全局过滤器

如何在WebApplicationInitializer中为Servlet过滤器指定url-pattern?

如何在Spring应用程序的servlet过滤器中自动装配bean?

如何在路由之前在Play 1.2.x中调用servlet过滤器

如何在过滤器中获取servlet的元信息?

如何在Google App Engine的app.yaml文件中配置servlet过滤器?

如何在Ratpack处理程序中获取Servlet过滤器(之前/之后)行为?