我不知道我在这里做错了什么,但当我将faces上下文放在URL中两次时,它就绕过了我的所有领域证券。
我的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*,我假设在管理的末尾的*是导致它的原因。但是,如果domain.com/faces/faces是无效的,而只有domain.com/faces是有效的,那么如何解决这个问题呢?
我似乎找不到其他人面临这一问题。所以我肯定做错什么了。
谢谢
发布于 2014-03-16 19:08:29
,首先,好消息,:你没有做错什么。
来解决:在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最接近的文本匹配。如果不将资源解析为受限制的资源,则在不进行干扰的情况下服务资源。
FacesServlet,然后FacesServlet似乎盲目地删除了对requestURL中faces的所有引用(因为您已经说了OK to /faces/*),并提供了剩下的任何内容。FacesServlet 必须在文件夹结构中找到对应于URL的文字资源。验证这一理论,可能需要向mojarra团队提交一份批判性JIRA。
https://stackoverflow.com/questions/22434622
复制相似问题