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

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

卫弘图
2023-03-14
问题内容

如何使用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


问题答案:
  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.xml上url-pattern的/*/Check_License/*根据上下文路径上,或者如果你是在Servlet的3.0已经使用了@WebFilter注解为代替。

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

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



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

  • 如果任何< code>J2EE应用程序直接命中servlet,然后servlet将相同的请求转发给某个< code >。jsp页面。 我有一个带有以下url模式的servlet过滤器 因此,转发的请求是否也会进行过滤。 在我的情况下,它不会到来,这是一个预期的行为。只是想了解这一点。

  • 如何在java过滤器中更改请求体以防止< code>XSS攻击?我构建了< code > http servlet requestwrapper 并使用< code>getparameter来更改主体,但得到流关闭异常。

  • 我有下面的servlet过滤器。

  • 这可能起作用,但由于某种原因,数据基本上是空的。我猜原因是因为过滤器不起作用。 我不太清楚如何包装Servlet过滤器,因为它们与Jersey ContainerRequestFilter期望不同的输入和输出。JerseyConfig中的以下实现似乎什么也不做,因为日志没有指示筛选器正在注册,而且在调试模式下不能中断这些文件中的行。

  • 问题内容: Servlet和Filter有什么区别?您建议使用什么来授权页面? 问题答案: 当你要根据特定条件过滤和/或修改请求时,请使用。使用时要控制,预处理和/或后处理请求。 在Java EE的教程中提到有关筛选如下: 筛选器是可以转换请求或响应的标头和内容(或两者)的对象。过滤器与Web组件的不同之处在于,过滤器本身通常不会创建响应。相反,过滤器提供的功能可以“附加”到任何类型的Web资源。