首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FacesServlet URL模式

FacesServlet URL模式
EN

Stack Overflow用户
提问于 2014-03-16 08:23:14
回答 1查看 1.5K关注 0票数 2

我不知道我在这里做错了什么,但当我将faces上下文放在URL中两次时,它就绕过了我的所有领域证券。

我的URL模式:

代码语言:javascript
复制
<servlet-mapping>
    <servlet-name>Faces</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

安全约束

代码语言:javascript
复制
<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是有效的,那么如何解决这个问题呢?

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-16 19:08:29

,首先,好消息,:你没有做错什么。

来解决:在FacesServlet上使用扩展映射变量

代码语言:javascript
复制
<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/*定义为受保护的资源时,请求一个/faces/faces/admin/admin.xhtml,然后进行/faces/* servlet映射,容器将尝试验证/faces/faces/admin/index.xhtml是一个受限资源(而不是)。由于容器没有理由进一步推迟请求,所以它将请求交给FacesServlet,然后FacesServlet似乎盲目地删除了对requestURL中faces的所有引用(因为您已经说了OK to /faces/*),并提供了剩下的任何内容。
  • 这就是为什么文件扩展名servlet定义似乎不受其影响的原因;在文件扩展名映射的情况下,即使在容器确定资源是否受到约束之前,FacesServlet 必须在文件夹结构中找到对应于URL的文字资源。

验证这一理论,可能需要向mojarra团队提交一份批判性JIRA。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22434622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档