如何避免用户访问JSF中的.xhtml页面?

| 我是JSF的新手,只写了第一个简单的jsf网络应用程序。 具有.jsf的URL映射到WebContent中的.xhtml文件,但是为什么我可以使用所有jsf标签在Web浏览器中打开.xhtml。如何保护呢?     
已邀请:
您可以在
web.xml
中添加安全约束,以阻止对
*.xhtml
的所有请求。
<security-constraint>
    <display-name>Restrict raw XHTML Documents</display-name>
    <web-resource-collection>
        <web-resource-name>XHTML</web-resource-name>
        <url-pattern>*.xhtml</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>
    
除了定义一个
<security-constraint>
来阻止直接访问
.xhtml
文件,这是Stacker在此问题上正确回答的,您还可以将
FacesServlet
映射的
<url-pattern>
*.jsf
更改为
*.xhtml
<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>*.xhtml</url-pattern>
</servlet-mapping>
在JSF 1.x中,此操作以无限循环结束,但在JSF 2.x中不再可用。因此,您可以仅以call4ѭ的形式调用/链接所有页面,而无需摆弄其他分机。唯一的缺点是,如果不调用
FacesServlet
,就无法显示“普通” XHTML文件,但是无论如何,这样的页面都应命名为
.html
:)     
在GAE上,您需要做两件事: 如上所述编辑web.xml 添加appengine-web.xml
<static-files>
    <exclude path=\"/**.xhtml\" />
</static-files>`
    
您可以使用Servlet过滤器
@WebFilter(filterName = \"XhtmlFilter\", urlPatterns = { \"*.xhtml\" })
public class XhtmlFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        ((HttpServletResponse) response).sendError(404);
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    }
}
    
据我所知,在为Google App Engine和服务器界面设置项目时,mk761203的答案绝对有用。在不排除此文件的情况下,GAE会自动将扩展名为.xhtml的文件作为静态文件插入,由Googles服务器场的专用服务器提供服务。在此处了解更多信息:https://developers.google.com/appengine/docs/java/config/appconfig#Static_Files_and_Resource_Files     

要回复问题请先登录注册