jsf - 如何在URL中使用.jsf扩展名?

标签 jsf jsf-2 url-pattern servlet-mapping

我正在开发一个JSF 2 Web应用程序。对于威信,我希望每个URL都以.jsf扩展名结尾。现在,它以.xhtml结尾。如果我将其直接更改为Web浏览器地址栏中的.jsf,则会显示HTTP 500错误。

如何将其设置为.jsf

最佳答案

JSF页面的URL模式由<servlet-mapping>FacesServletweb.xml指定。正如您提到的.xhtml可以正常工作一样,您显然已将其配置如下:

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>      
</servlet-mapping>

您需要相应地更改<url-pattern>以获得所需的虚拟URL扩展名。

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>      
</servlet-mapping>

实际上,这就是您需要更改以实现具体功能要求的所有内容。

但是,这带来了一个安全问题。现在,当将URL中的扩展名从.jsf更改为.xhtml时,最终用户可以看到原始Facelets文件源代码。您可以通过向web.xml添加以下安全约束来防止这种情况:

<security-constraint>
    <display-name>Restrict access to Facelets source code.</display-name>
    <web-resource-collection>
        <web-resource-name>Facelets</web-resource-name>
        <url-pattern>*.xhtml</url-pattern>
    </web-resource-collection>
    <auth-constraint/>
</security-constraint>

关于jsf - 如何在URL中使用.jsf扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12120648/

相关文章:

java - :selectOneMenu send me previus value

Spring:/** 和/* 关于路径的区别

jsf - 如何更改 p :datatable dynamically 的延迟加载的 setRowCount

jsf - 当状态保存方法设置为客户端且用户 session 有效时,在集群环境中获取ViewExpiredException

jsf-2 - 焦点丢失时调用 bean 方法

java - 无法从表单操作调用 servlet

jsf - 为什么 FacesServlet 不能有/*. 的 url-pattern?

jsf - org.omnifaces.facesviews.FacesViewsForwardingFilter 处的 NullPointerException

java - 复合组件监听器仅在页面重新加载后工作

java - 如何在 jsf selectOneMenu 中访问选定的标签和选定的描述,其中 selectOneMenu 与 javax.faces.model.SelectItem 对象绑定(bind)?