如何创建 JSF 过滤器/url 模式来保护 javascript

Posted

技术标签:

【中文标题】如何创建 JSF 过滤器/url 模式来保护 javascript【英文标题】:How to create a JSF Filter/url-pattern to protect javascripts 【发布时间】:2012-06-15 18:19:19 【问题描述】:

我编写了一个 Java Web 过滤器来处理我的 JSF 应用程序的安全性。我有这样的过滤器映射:

<filter-mapping>
    <filter-name>authFilter</filter-name>
    <url-pattern>/secure/*</url-pattern>
    <url-pattern>/login.jsf</url-pattern>
    <url-pattern>/*.js.jsf</url-pattern>    <--- invalid pattern
</filter-mapping>

现在我想创建一个 url 模式来过滤所有 javascript 文件。我正在使用 Primefaces,因此 .js 文件在 URL 中被检索,如下所示:

http://localhost:8080/MyProject/javax.faces.resource/MyJavascriptFile.js.jsf?ln=MyLibrary

我无法过滤整个 javax.faces.resouces,因为它还包含 CSS 文件。有没有办法创建一个只匹配 javascripts 的 URL 模式?

【问题讨论】:

作为一项工作,我添加了模式&lt;url-pattern&gt;/javax.faces.resource&lt;/url-pattenr&gt; 并在过滤器代码中处理了所需的情况 【参考方案1】:

* 通配符功能在 JSF 中是有限的,因为只允许有一个 *,并且它必须在“form-view-id”字符串的末尾。例如,(任何 xml) 它有效。

<from-view-id>/customer/*</from-view-id>

它永远不会匹配......

<from-view-id>/cus*mer/</from-view-id>
<from-view-id>/c*sto*er/*</from-view-id>
<from-view-id>*/customer</from-view-id>

check out this page

【讨论】:

【参考方案2】:
<url-pattern>/*.js.jsf</url-pattern>    <--- invalid pattern

这确实是一个无效的 URL 模式。通配符 * 只能位于 URL 模式的开头或结尾。在您的特定情况下,您根本不需要 / 前缀。

<url-pattern>*.js.jsf</url-pattern>    <--- valid pattern

请注意,此问题与 JSF无关。 Servlet 过滤器是基本 Servlet API 的一部分。

另见:

mapping servlet to serve my requests

【讨论】:

以上是关于如何创建 JSF 过滤器/url 模式来保护 javascript的主要内容,如果未能解决你的问题,请参考以下文章

如何从过滤器中读取 JSF 会话 bean?

Servlet 过滤器不响应给定的 URL 模式

在 servlet 过滤器中使用请求参数将 JSF ajax 请求重定向到 URL

如何在 JSF 2 中进行 Web 过滤?

JSF 重定向在过滤器中导致异常

如何保护 JSF 应用程序客户端和服务器端 REST API 模块