用漂亮的脸蛋和网络滤镜



使用Tomcat 7—Primefaces 3.4.1—javax faces 2.1.17—prettyfaces-jsf2 3.3.3

我在我的项目中正确配置了漂亮的面孔,但我的web过滤器不能与由漂亮面孔编写的新url一起工作。

下面是一个示例pretty-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>

登录(欢迎)和注册页面在"public"文件夹中,它们的web过滤器是用注释定义的:@WebFilter("/public/*")

为我的主页在"安全"文件夹(确切地说,文件夹中会有更多的页面),我还定义了一个web过滤器及其注释:@WebFilter("/secure/*)

漂亮的url工作得很好,但是这些过滤器只有在我写原始url时才工作。

1)我如何修复我的网页过滤器?

2)我还想阻止用户输入原始url。我知道漂亮的面孔是完全隐藏原始的url,但有办法做到这一点吗?

, ——感谢BalusC

如果你用注释定义了你的过滤器,你可以像

那样配置分派器设置

@WebFilter(urlPatterns = "/public/*", dispatcherTypes = {DispatcherType。请求,DispatcherType.FORWARD} )

PrettyFaces使用许多url重写解决方案RequestDispatcher#forward()来将请求转发到所需的目标资源。

Servlet过滤器,当没有任何<dispatcher>映射时,默认情况下只监听"初始"请求,而不监听转发的、包含的或错误的请求。

因此,当您在 PrettyFaces之后映射web.xml 中的另一个servlet过滤器时,默认情况下它不会被触发,除非您显式地在FORWARD上设置<dispatcher>,旁边是默认的REQUEST(您应该为PrettyFaces实际上不需要执行forward的情况保留这个)。

<filter-mapping>
    ...
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

或者,在过滤器上使用@WebFilter的情况下,使用dispatcherTypes属性:

@WebFilter(..., dispatcherTypes = { REQUEST, FORWARD })

或者,如果所讨论的过滤器不会以任何方式改变请求/响应目标,例如设置字符集,使用Gzip压缩,监听异常等,那么您也可以将其放在PrettyFaces 之前。

相关内容

  • 没有找到相关文章

最新更新