【问题标题】:Servlet Filter for security用于安全的 Servlet 过滤器
【发布时间】:2013-11-09 21:04:38
【问题描述】:

我正在使用 Servlet 过滤器来实现安全应用,

<filter>
    <filter-name>HelloFilter</filter-name>
    <filter-class>com.sarp.filter.HelloFilter</filter-class>
    <init-param>
        <param-name>login_form</param-name>
        <param-value>/loginForm.jsp</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>HelloFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping> 

但如果我的 servlet 使用 jsp 文件,我无法捕获它们

private void execute(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    getServletContext().getRequestDispatcher("/deniz.jsp").forward(request, response);

例如 deniz.jsp 出现时没有 aauthentication , 有什么解决办法吗? 谢谢

【问题讨论】:

  • servlet 过滤器不是安全过滤器。
  • 在任何资源上使用 forward 将在内部转发请求而不调用过滤器。扩展匹配模式以捕获 servlet 的 url,或者在 servlet 中实现 security 代码(顺便说一句,这不是一个好主意)。
  • 你们为安全提供什么?

标签: java jsp jakarta-ee servlets filter


【解决方案1】:

使用filter-mapping 中的调度程序标签指定FORWARD 行为

<filter-mapping>
    <filter-name>HelloFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

此信息可在specification6.2.5 部分找到。

自 Java Servlet 规范 2.4 版以来的新功能是 配置要在请求调度程序 forward() 下调用的过滤器 和 include() 调用。

通过使用部署描述符中的新元素, 开发人员可以为过滤器映射指明他是否愿意 在以下情况下应用于请求的过滤器:

  1. 正在请求调度程序下处理请求,该请求调度程序代表与或匹配的 Web 组件 使用 forward() 调用。

这由一个值为 FORWARD 的元素指示

【讨论】:

  • 您需要使用 REQUE£ST 否则只会捕获转发的请求作为过滤器。我怀疑 INCLUDE 也是必需的。 ERROR 和 ASYNC 可能不是,但因为它是一个安全过滤器......
  • @MarkThomas 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2020-11-06
  • 2012-05-02
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 2011-11-01
相关资源
最近更新 更多