【问题标题】:Mask URL in JSFJSF 中的掩码 URL
【发布时间】:2010-10-04 03:47:20
【问题描述】:

我有一个用 JSF 用 JAVA 编写的企业应用程序(使用 RichFaces 3.3)。目前我的网址如下所示:

http://localhost/WebApplication/faces/folder1/page.jsp

问题是我如何屏蔽我的网址以使其如下:

http://localhost/folder1/page.jps

基本上我想隐藏“Application/faces/”

谢谢

【问题讨论】:

    标签: java jsf glassfish friendly-url


    【解决方案1】:

    您还可以将文件夹名称从 faces 更改为 jsp,例如:

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/jsp/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
       <welcome-file>jsp/index.jsp</welcome-file>
    </welcome-file-list>
    

    然后您的网址将如下所示:

    http://localhost/WebApplication/jsp/folder1/page.jsp
    

    如果您将应用程序部署到应用程序服务器的上下文路径 / ,它将如下所示:

    http://localhost/jsp/folder1/page.jsp
    

    现在很难发现您将 JSF 用于 lamer ;-) 但黑客可以通过将浏览器指向像这样的 URL 来调查它http://localhost/folder1/page.jsp

    【讨论】:

      【解决方案2】:

      是的。我们设计 PrettyFaces 正是为了处理这种情况:

      PrettyFaces – SEO, Dynamic Parameters, Bookmarks, and Navigation for JSF / JSF2

      【讨论】:

        【解决方案3】:

        PrettyFaces 可让您重写您的网址。 如果您喜欢更轻量级的东西,请扩展 NavigationHandler 并覆盖 处理导航,例如通过调用 context.getExternalContext().redirect()

        【讨论】:

          【解决方案4】:

          请注意,/faces/ 是由于web.xml 中的映射。这是 JSF 的标准映射,但您也可以使用扩展映射 - 即 URL 末尾的 .faces

          例如,在我的应用程序中,这是在 web.xml 文件中:

          <servlet-mapping>
              <servlet-name>Persistent Faces Servlet</servlet-name>
              <url-pattern>*.faces</url-pattern>
          </servlet-mapping>
          

          这是使用 IceFaces,但是对于您来说使用 RichFaces 将是类似的。你的可能看起来像这样:&lt;url-pattern&gt;/faces/*&lt;/url-pattern&gt;。如果您将其更改为*.faces,则您的最终 URL 将如下所示:

          http://localhost/WebApplication/folder1/page.faces

          如果您将它与 Peter Hilton 给出的关于部署为根 Web 应用程序的答案结合使用,您的最终 URL 将如下所示:

          http://localhost/folder1/page.faces

          这几乎正是您想要的。

          【讨论】:

            【解决方案5】:

            要在应用程序中重写 URL,您可以使用 UrlRewrite。但是,在这种情况下,您似乎想要删除 Web 应用程序的上下文路径,在这种情况下,您有两个选择:

            1. 将您的应用程序部署到上下文路径/(如何特定于应用程序服务器)
            2. 在端口 80 上运行 Apache,并使用 mod_proxy 将某些 URL 代理到在不同端口上运行的应用程序服务器,使用类似如下的配置。

            Apache 配置:

            <Proxy http://localhost:8080/*>
                Order Allow,Deny
                Allow From All
            </Proxy>
            
            ProxyPreserveHost On
            ProxyPass / http://localhost:8080/WebApplication/
            ProxyPassReverse / http://localhost:8080/WebApplication/
            

            【讨论】:

            • +1 用于 UrlRewrite 链接。我一直在寻找类似的东西!
            • 你也可以使用 PrettyFaces,它是专为 JSF 设计的 URL 重写:ocpsoft.com/prettyfaces
            猜你喜欢
            • 2010-11-25
            • 2011-04-27
            • 1970-01-01
            • 1970-01-01
            • 2019-04-12
            • 2011-06-08
            • 1970-01-01
            • 2016-11-20
            • 2021-03-20
            相关资源
            最近更新 更多