FacesServlet URL模式
我不确定我在这里做错了什么,但是当我在URL中将两次面孔上下文时,它绕过了我所有的Realm证券。
我的url格式:
Faces /faces/*
安全约束
ADMIN Protected Admin Area /faces/admin/* ADMIN NONE
所以,当我转到: http : //domain.com/faces/admin/index.xthml我得到了正在寻找的正确答案。
但是,如果我转到: http : //domain.com/faces/faces/admin/index.xhtml它完全让我进入,无论servlet预定在/ admin *我最终假设*管理员是导致它的原因。 但是,我如何解决这个问题,使domain.com/faces/faces无效,只有domain.com/faces有效?
我似乎无法找到任何其他人面临这个问题。 所以我一定是做错了。
谢谢
首先,好消息 :你没有做错任何事。
要解决 :在FacesServlet
上使用扩展映射变体
Faces *.xhtml
坏消息 :这可能是请求匹配模型中的一个疏忽(读取:缺陷)。
我的假设是FacesServlet
的URL匹配模型与标准的servlet容器请求匹配模型不兼容。
在理想情况下(没有JSF),/ faces / faces / admin / index.xhtml必须对应于servlet或特定资源。 容器将尝试validation它是否是有效资源,然后validation资源是否是受约束的资源。
这里的问题是容器非常按字面意思获取资源约束,这意味着它在安全表中查找与该URL最接近的文字匹配。 如果它没有将资源解析为受限制,则它会在不干扰的情况下为资源提供服务。
-
当您将/ faces / admin / *定义为受保护资源时,请求/faces/faces/admin/admin.xhtml然后还有/ faces / * servlet映射,容器会尝试validation/ faces / faces / admin /index.xhtml是一种受约束的资源(事实并非如此)。 由于容器没有理由进一步提出请求,它将请求交给
FacesServlet
,然后FacesServlet
似乎只是盲目地剥离requestURL中所有对faces的引用(因为你已经说好了/ faces / *)和服务于任何剩下的东西。 -
这就是为什么文件扩展名servlet定义似乎不受它影响的原因; 在文件扩展名映射的情况下,
FacesServlet
必须在您的文件夹结构中找到与该URL对应的文字资源,甚至在容器确定资源是否受约束之前
validation这一理论,可能需要向mojarra团队提交关键的JIRA。