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

时间:2011-04-15 10:16:46

标签: java jsf jsf-2

我是JSF的新手,只是简单地编写jsf web app。

带有.jsf的URL映射到WebContent中的.xhtml文件,但为什么我可以在Web浏览器中使用所有jsf标记打开.xhtml。如何保护这个?

5 个答案:

答案 0 :(得分:18)

您可以向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>

答案 1 :(得分:10)

除了定义<security-constraint>以阻止Stacker在此问题上正确回答的.xhtml文件的直接访问权限之外,您还可以更改<url-pattern>的{​​{1}}从FacesServlet*.jsf的映射。

*.xhtml

在JSF 1.x中,这常常以无限循环结束,但在JSF 2.x中不再存在。因此,您可以将所有页面调用/链接为<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> ,而无需摆弄不同的扩展程序。唯一的缺点是,如果不调用.xhtml,您将无法显示“普通”XHTML文件,但无论如何这样的页面应该被命名为FacesServlet:)

答案 2 :(得分:2)

在GAE上你需要两件事:

  1. 如上所述编辑web.xml
  2. 添加appengine-web.xml
  3. <static-files>
        <exclude path="/**.xhtml" />
    </static-files>`
    

答案 3 :(得分:1)

您可以使用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() {
    }
}

答案 4 :(得分:0)

据我所知,在为谷歌应用引擎和服务器面孔设置项目时,mk761203的答案绝对有用。在不排除这些文件的情况下,GAE会自动将文件与.xhtml扩展名作为静态文件进行插入,这些文件由googles服务器场的专用服务器提供服务。在此处阅读更多内容:https://developers.google.com/appengine/docs/java/config/appconfig#Static_Files_and_Resource_Files