1

我在这里面临一个 Java Web 项目的问题。我正在处理的项目是使用标准 jsp 与 jsf 页面混合而成的。应用程序的主页 main.jsp 是一个标准的 jsp 页面,它需要访问一个托管 bean,该 bean 具有在用于检查用户身份验证的 servlet 过滤器中创建的会话范围。在我的 web.xml 中,我设置了 faces 引擎必须响应 .jsf 和 /faces/* 请求

  <filter-mapping>
    <filter-name>extensionsFilter</filter-name>
    <url-pattern>*.jsf</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>extensionsFilter</filter-name>
    <url-pattern>/faces/*</url-pattern>
  </filter-mapping>

如果我打开我的应用程序,http//myserver/myapp/faces/main.jsp一切正常。如果我打开我的应用程序,http://myserver/myapp/main.jsp我会收到一个错误,因为还没有创建面孔上下文。当用户只需在浏览器上键入 h**p://myserver/myapp 时,既不设置欢迎页面也不设置 apache 重定向,我可以让应用程序打开正确的页面(在 faces 上下文中的 main.jsp):那是因为页面 /faces/main.jsp 在物理上不存在。

我想可能有 2 个解决方案:能够让 faces 上下文甚至在 /faces/* 模式之外启动,或者找到一种方法让 tomcat 重定向到 /faces/main.jsp 即使页面不存在.. .但我尝试的一切都失败了。

4

1 回答 1

1

只是不要通过http://myserver/myapp/main.jsp打开您的应用程序,而是通过http://myserver/myapp/faces/main.jsp或(更优选)http://myserver/myapp/main 打开您的应用程序。 jsf _

如果您的全部担忧是最终用户不应该能够访问外部的 JSP 页面url-patternFacesServlet否则这个问题没有多大意义;)),那么选择*.jsf模式并在模式中添加一个security-constraintauth-constraint*.jsp模式web.xml. 这应该注意最终用户将无法*.jsp直接请求 URL。

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

当您使用/faces/*映射时,这是不可能直接实现的。我也会摆脱它web.xml

此外,为了覆盖正在键入http://myserver/myapp的最终用户,只需定义main.jsfwelcome-fileinweb.xml并删除其他定义的欢迎文件。但是,在 Tomcat(也可能还有其他 servlet 容器)中,您需要创建一个具有该名称的空文件,以欺骗服务器该文件存在于磁盘上。

于 2010-08-02T11:21:56.040 回答