jsp - jsf上下文创建

标签 jsp jsf tomcat contextpath

我在这里遇到一个 Java 网络项目问题。我正在处理的项目是用标准 jsp 和 jsf 页面混合而成的。 应用程序的主页,称为 main.jsp,是一个标准的 jsp 页面,需要访问在用于检查用户身份验证的 servlet 过滤器中创建的具有 session 作用域的托管 bean。 在我的 web.xml 中,我设置了面部引擎必须响应 .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 打开我的应用程序,我会得到一个错误,因为面部上下文尚未创建。 无论是设置欢迎页面还是设置 apache 重定向,当用户只需在浏览器中键入 h**p://myserver/myapp 时,我都能够让应用程序打开正确的页面(faces 上下文中的 main.jsp):那是因为页面/faces/main.jsp 物理上不存在。

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

最佳答案

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

如果您完全担心最终用户不应该能够访问 FacesServleturl-pattern 之外的 JSP 页面(否则这个问题不会很有道理 ;) ),然后选择 *.jsf 模式并在 上添加一个带有空 auth-constraintsecurity-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.jsf 定义为 web.xml 中的 welcome-file 并删除其他定义的欢迎文件。然而,在 Tomcat(可能还有其他 servlet 容器)中,您需要创建一个完全具有该名称的空文件,以欺骗服务器该文件存在于磁盘上。

关于jsp - jsf上下文创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3387094/

相关文章:

javascript - 如何将 javascript 变量传递给 servlet

java - package.Class 不是 Servlet (Tomcat/J2EE)

java - 如何将查询字符串从一个 jsp 页面传递到另一个 jsp 页面而不在地址栏显示名称/值对?

java - 将 .tld 文件放在哪里,以便正确打包使用 maven2 生成的 JAR 文件?

jsf - JSF行动与结果属性

java - 如何禁用 Tomcat JARScanner

java - 将 Spring Boot 属性 server.compression.enabled 设置为 true 不会应用于自动配置的 Tomcat 服务器

jsf - Spring 安全中的ajax

javascript - 直接从 Javascript 渲染 JSF 组件

android - 你如何从android http get访问本地端口8080 url