如何在URL中没有“faces”的情况下限制对JSF应用程序页面的访问

时间:2014-05-05 09:15:56

标签: jsf web-applications

我有一个JSF Web应用程序,其URL类似于

http://host/app/faces/<page>.xhtml

app 是上下文根, / faces / * 是Servlet URL模式

其中 page 可以是我的应用程序中的任何页面。现在,如果我使用此URL访问任何页面,如果没有某些后端服务的活动会话,我可以在其中重定向 login.xhtml 的地方访问控制器。

如果我从网址中删除 faces 字符串,

http://host/app/<page>.xhtml

然后呈现一些页面的静态内容。

我的问题是如何停止渲染静态内容。

1 个答案:

答案 0 :(得分:0)

只需将您的网址格式从.xhtml更改为.html 并使用安全约束。这将限制对xhtml文件的直接访问。

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <servlet>
        <servlet-name>facesServlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>facesServlet</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>

    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>

    <welcome-file-list>
        <welcome-file>login.html</welcome-file>
    </welcome-file-list>

    <security-constraint>
        <display-name>Restrict direct access to XHTML files</display-name>
        <web-resource-collection>
            <web-resource-name>XHTML Files</web-resource-name>
            <url-pattern>*.xhtml</url-pattern>
        </web-resource-collection>
        <auth-constraint/>
    </security-constraint>

</web-app>