如何避免用户访问 JSF 中的 .xhtml 页面?
Posted
技术标签:
【中文标题】如何避免用户访问 JSF 中的 .xhtml 页面?【英文标题】:How to avoid user access to .xhtml page in JSF? 【发布时间】:2011-08-06 05:24:50 【问题描述】:我是 JSF 新手,首先编写的是 jsf 网络应用程序。
带有 .jsf 的 URL 映射到 WebContent 中的 .xhtml 文件,但为什么我可以在带有所有 jsf 标签的 Web 浏览器中打开 .xhtml。如何保护它?
【问题讨论】:
试着把它们放在WEB-INF下 @ahvargas:这不适用于 JSF。 限制是附加的吗?例如:您可以使用 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()
【讨论】:
【参考方案2】:就我的经验而言,mk761203 的答案在为谷歌应用引擎和服务器端设置项目时绝对有帮助。在不排除这些文件的情况下,GAE 会自动将扩展名为 .xhtml 的文件作为静态文件进行解释,这些文件由谷歌服务器场的专用服务器提供服务。在这里阅读更多:https://developers.google.com/appengine/docs/java/config/appconfig#Static_Files_and_Resource_Files
【讨论】:
【参考方案3】:您可以向您的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>
【讨论】:
【参考方案4】:在 GAE 上,您需要两件事:
-
如上所述编辑 web.xml
添加 appengine-web.xml
<static-files>
<exclude path="/**.xhtml" />
</static-files>`
【讨论】:
【参考方案5】:除了定义 <security-constraint>
以阻止 Stacker 在此问题上正确回答的对 .xhtml
文件的直接访问之外,您还可以将 FacesServlet
映射的 <url-pattern>
从 *.jsf
更改为 @987654326 @。
<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>
在 JSF 1.x 中,这曾经以无限循环结束,但在 JSF 2.x 中不再如此。因此,您可以将所有页面调用/链接为.xhtml
,而无需摆弄不同的扩展名。唯一的缺点是,如果不调用FacesServlet
,您将无法显示“纯”XHTML 文件,但是这样的页面无论如何都应该命名为.html
:)
【讨论】:
@s_t_e_v_e:无论如何,GAE 是一头奇怪的野兽。 我不明白,如果您在 *.xhtml 上定义以上是关于如何避免用户访问 JSF 中的 .xhtml 页面?的主要内容,如果未能解决你的问题,请参考以下文章
无法从xhtml文件,Jsf managedBean访问方法
JSF .xhtml 页面中的 Google 地址自动完成功能 - 任何示例? [复制]