一尘不染

jsf上下文创建

jsp

我在这里遇到Java网络项目的问题。我正在处理的项目是将标准的jsp与jsf页面混合而成的。应用程序的主页,称为main.jsp,是一个标准的jsp页面,需要访问具有在servlet过滤器中创建的会话范围的托管bean,该servlet过滤器用于检查用户的身份验证。在我的web.xml中,我设置了face引擎必须响应.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则会出现错误,因为尚未创建faces上下文。当用户在浏览器中简单地输入h
** p:// myserver /
myapp时,既不设置欢迎页面也不设置apache重定向,我能够让应用程序打开正确的页面(faces上下文内的main.jsp):这是因为/faces/main.jsp页面实际上不存在。

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


阅读 319

收藏
2020-06-10

共1个答案

一尘不染

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

如果你的整个关注的是,最终用户不应该能够访问JSP页面外url- pattern的的FacesServlet(否则这个问题就没有多大意义;)),然后去的*.jsf模式,并添加security- constraint一个空auth- 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- fileweb.xml和摆脱对方definied欢迎文件。但是,在Tomcat(可能还有其他servlet容器)中,您将需要创建一个具有正确名称的空文件,以欺骗该文件在磁盘上的服务器。

2020-06-10