Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JSF中避免用户访问.xhtml页面?_Java_Jsf_Jsf 2 - Fatal编程技术网

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

Java 如何在JSF中避免用户访问.xhtml页面?,java,jsf,jsf-2,Java,Jsf,Jsf 2,我是JSF新手,首先编写的是JSFWeb应用程序 带有.jsf的URL映射到WebContent中的.xhtml文件,但为什么我可以在web浏览器中使用所有jsf标记打开.xhtml呢。如何保护它?您可以向web.xml添加安全约束,阻止对*.xhtml的所有请求 限制原始XHTML文档 XHTML *.xhtml 除了定义一个来阻止直接访问.xhtml文件(正如Stacker在这个问题上正确回答的那样),您还可以将

我是JSF新手,首先编写的是JSFWeb应用程序


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

您可以向
web.xml
添加安全约束,阻止对
*.xhtml
的所有请求


限制原始XHTML文档
XHTML
*.xhtml

除了定义一个
来阻止直接访问
.xhtml
文件(正如Stacker在这个问题上正确回答的那样),您还可以将
映射从
*.jsf
更改为
*.xhtml


小脸蛋
javax.faces.webapp.FacesServlet
1.
小脸蛋
*.xhtml

在JSF1.x中,这通常以无限循环结束,但在JSF2.x中不再如此。因此,您可以将所有页面作为
.xhtml
调用/链接,而无需修改不同的扩展名。唯一的缺点是,如果不调用
FacesServlet
,您将无法显示“普通”XHTML文件,但这样的页面应命名为
.html
无论如何:)

在GAE上,您需要两件事:

  • 如上所述编辑web.xml
  • 加载项appengine-web.xml
  • 
    `
    
    您可以使用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() {
        }
    }
    

    就我的经验而言,mk761203的答案在为google app engine和服务器faces设置项目时绝对有用。在不排除这些文件的情况下,GAE会自动将扩展名为.xhtml的文件作为静态文件进行交互,这些文件由Google服务器场的专用服务器提供服务。在此处阅读更多信息:

    尝试将它们放在WEB下-INF@ahvargas:这不适用于JSF。限制是附加的吗?例如:限制原始XHTML文档XHTML*。XHTML Auth/*管理员不限制将原始XHTML文件传输给用户with@s_t_e_v_e:GAE无论如何都是个怪兽。我不明白,如果你在*.xhtml上定义并设置为*.xhtml,那么如何设置xhtml使其不会被阻止?@michal777:“除了…”,所以你不需要两者都定义。
    @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() {
        }
    }