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

我是JSF的新手,并且首先编写简单的jsf web应用程序。

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

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

  Restrict raw XHTML Documents  XHTML *.xhtml    

除了定义一个来阻止直接访问.xhtml文件,正如Stacker在这个问题上正确回答的那样,你也可以将FacesServlet映射的*.jsf*.xhtml

  facesServlet javax.faces.webapp.FacesServlet 1   facesServlet *.xhtml  

在JSF 1.x中,这常常以无限循环结束,但在JSF 2.x中不再存在。 所以你可以调用/链接所有页面为.xhtml而不用摆弄不同的扩展名。 唯一的缺点是你不能在不调用FacesServlet情况下显示“普通”XHTML文件,但是这样的页面应该被命名为.html 🙂

在GAE上你需要两件事:

  1. 如上所述编辑web.xml
  2. 在appengine-web.xml中添加
   ` 

您可以使用servletfilter

 @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的答案绝对有用。 在不排除这些文件的情况下,GAE会自动将带有.xhtml扩展名的文件作为静态文件进行插入,这些文件由googles服务器场的专用服务器提供服务。 在此处阅读更多内容: https : //developers.google.com/appengine/docs/java/config/appconfig#Static_Files_and_Resource_Files