gpt4 book ai didi

java - FacesServlet URL 模式

转载 作者:行者123 更新时间:2023-11-30 11:21:01 25 4
gpt4 key购买 nike

我不确定我在这里做错了什么,但是当我在 URL 中两次放置面孔上下文时,它会绕过我所有的领域证券。

我的网址模式:

<servlet-mapping>
<servlet-name>Faces</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>

安全约束

<security-constraint>
<display-name>ADMIN</display-name>
<web-resource-collection>
<web-resource-name>Protected Admin Area</web-resource-name>
<description/>
<url-pattern>/faces/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>ADMIN</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>

所以当我转到:http://domain.com/faces/admin/index.xthml我确实得到了我正在寻找的正确回应。

但如果我转到:http://domain.com/faces/faces/admin/index.xhtml它完全让我进入,不管 servlet 被安排在/admin* 我假设 admin 末尾的 * 是导致它的原因。但是我该如何解决这个问题,使 domain.com/faces/faces 无效,而只有 domain.com/faces 有效?

我似乎找不到其他人面临这个问题。所以我一定是做错了什么。

谢谢

最佳答案

首先,好消息:您没有做错任何事。

解决:在FacesServlet

上使用扩展映射变体
<servlet-mapping>
<servlet-name>Faces</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

坏消息:这可能是请求匹配模型中的一个疏忽(阅读:缺陷)。

我的假设是 FacesServlet 的 URL 匹配模型不能很好地与标准 servlet 容器请求匹配模型一起工作。


在理想情况下(没有 JSF),/faces/faces/admin/index.xhtml 必须对应于 servlet 或特定资源。容器将尝试验证它是否是有效资源,然后验证该资源是否是受限资源。

这里的问题是容器从字面上非常接受资源约束,这意味着它在安全表中寻找与该 URL 最接近的字面匹配。如果它没有将资源解析为受限资源,它会在不干扰的情况下为资源提供服务。

  • 当您将 /faces/admin/* 定义为 protected 资源时,请求一个 /faces/faces/admin/admin.xhtml 然后还有/faces/* servlet 映射,容器会尝试验证 /faces/faces/admin/index.xhtml 是否是受限资源(事实并非如此)。由于容器没有理由进一步阻止请求,它将请求移交给 FacesServlet,然后 FacesServlet 似乎只是盲目地删除对 faces 的所有引用 在 requestURL 中(因为你已经对 /faces/* 说了 OK)并提供剩下的任何东西。

  • 这就是文件扩展 servlet 定义似乎不受其影响的原因; 在文件扩展名映射的情况下,FacesServlet必须在您的文件夹结构中找到对应于该 URL 的文字资源,甚至在容器之前判断资源是否受限

验证这个理论,可能需要向 mojarra 团队提交一个关键的 JIRA。

关于java - FacesServlet URL 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22434622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com