Java 如何在JSF中避免用户访问.xhtml页面?
我是JSF新手,首先编写的是JSFWeb应用程序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的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() {
}
}