有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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


共 (5) 个答案

  1. # 1 楼答案

    您可以向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>
    
  2. # 3 楼答案

    可以使用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() {
        }
    }
    
  3. # 4 楼答案

    除了定义一个<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>
    

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

  4. # 5 楼答案

    在GAE上,你需要两件事:

    1. 编辑网页。如上所述的xml
    2. 在appengine网站中添加。xml
    <static-files>
        <exclude path="/**.xhtml" />
    </static-files>`