使用Tomcat 7- Primefaces 3.4.1 - javax faces 2.1.17 - prettyfaces-jsf2 2 3.3.3
我正确地在我的项目上配置了漂亮的面孔,但是我的网页过滤器没有使用新的urls,这些urls是由漂亮面孔编写的。
下面是一个漂亮的-config.xml示例
<url-mapping id="home">
<pattern value="/home"/>
<view-id value="/secure/homepage.xhtml"/>
</url-mapping>
<url-mapping id="register">
<pattern value="/register"/>
<view-id value="/public/register.xhtml"/>
</url-mapping>
<url-mapping id="welcome">
<pattern value="/"/>
<view-id value="/public/welcome.xhtml"/>
</url-mapping>
<url-mapping id="profile">
<pattern value="/profile/#{userId}"/>
<view-id value="/profile.xhtml"/>
</url-mapping>登录(欢迎)和注册页面在“公用”文件夹中,它们的web筛选器是用注释:@WebFilter("/public/*")定义的。
对于“安全”文件夹中的主页(确切地说,文件夹中会有更多的页面),我还定义了一个web筛选器及其注释:@WebFilter("/secure/*)。
漂亮的urls运行良好,,但只有当我编写原始urls.时,这些过滤器才能正常工作。
1)如何修复我的网络过滤器?
2)我还想阻止用户输入原始网址。我知道漂亮的面孔完全隐藏了原始的urls,但是有什么方法可以做到吗?
-解决了 --谢谢BalusC
如果使用注释定义筛选器,则可以配置dispatcher设置,如
@WebFilter(urlPatterns = "/public/*",dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})
发布于 2013-03-25 01:21:18
PrettyFaces像许多URL重写解决方案一样使用RequestDispatcher#forward()将请求转发到所需的目标资源。
Servlet过滤器在没有任何<dispatcher>的情况下映射时,默认情况下只侦听“初始”请求,而不是转发、包含或错误的请求。
因此,当您将web.xml中的另一个servlet筛选器映射到PrettyFaces过滤器之后,默认情况下不会触发它,除非在默认的REQUEST旁边显式地在FORWARD上设置一个servlet过滤器(对于实际不需要执行转发的情况,PrettyFaces应该保留这个过滤器)。
<filter-mapping>
...
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>或者,对于在过滤器上使用@WebFilter的情况,使用dispatcherTypes属性:
@WebFilter(..., dispatcherTypes = { REQUEST, FORWARD })或者,如果所讨论的过滤器没有以任何方式更改请求/响应目标,例如设置字符集、使用Gzip压缩、侦听异常等等,那么您也可以将其放在PrettyFaces 1之前。
https://stackoverflow.com/questions/15606205
复制相似问题