2014-09-25 72 views
0

我需要阻止直接访问jsp页面。安全约束不起作用

我已经把我的web.xml是这样的:

<security-constraint> 
    <web-resource-collection> 
    <web-resource-name>My Hidden Pages</web-resource-name> 
    <url-pattern>/*.jsp</url-pattern> 
    </web-resource-collection> 
    <auth-constraint></auth-constraint> 
</security-constraint> 

,但所有的页面仍然在浏览器地址栏中输入自己的地址进行访问。 我该如何解决这个问题?

仅供参考我使用的码头 - Maven的插件和servlet-API 2.5

感谢

回答

0

你不隐瞒的JSP的方式。

有在构建时的几个常见的方法(最好选择第一)

  1. 预编译JSP和不包括在WAR文件的实际JSP文件。

  2. 把你的JSP文件放在WEB-INF文件夹的某处。然后通过Controller servlet完成对jsps的访问。这使用WEB-INF的安全性来防止直接访问JSP文件,这是所有servlet容器必须遵守的。

    见过去计算器问题,在此:

    还有更多的,只是搜索 “在WEB-INF JSP” 发现更多关于这个概念。

  3. 正确配置Jetty的JSP实现。完成后,这意味着所有对JSP文件的访问都必须经过该实现的JspServlet

    查看webdefault.xml例如如何定义这种映射。

    如果您在启动时看到关于"No JSP Support for "的错误或警告,那么您知道您尚未正确配置JSP,这意味着所有JSP文件将以静态方式提供服务。注意:如果您使用旧版本的Jetty(任何早于7.6.16版本的版本),或者使用较旧版本的Java(任何早于1.7_40的版本),或者在Windows上使用Jetty(此处存在问题Jetty 9.3.0将在下个月发布),那么即使这可以解决。

+0

只需更新jetty-maven-plugin(现在我正在使用9.2.3),'security-constraint'标签就开始工作。谢谢。 – helloIAmPau 2014-09-26 08:07:01

0

您的<url-pattern>不正确。它应该是<url-pattern>*.jsp</url-pattern>而不是/。根据规范允许的模式是:

A URL模式是一个相对于应用程序上下文的URI。 模式可以包括:

  • 路径映射,从/并用/*结束该图案识别与给定的路径开始,例如任何资源, /catalog/*/catalog/products/*
  • 扩展映射,从*.这模式标识具有给定扩展名的任何资源,例如,*.jsp*.gif
  • 默认servlet映射,仅包含/此模式标识默认servlet映射t应用程序的servlet。
  • 完全匹配此模式使用表示特定资源的字符串,例如/snoop是servlet映射,而 是/list/banner.jsp是文件映射。

如果你想确保给定文件夹中,你需要使用的图案像/folder/*,如果你想保护的所有网页只使用*.jsp,如果你想保护的所有页面,除了index.jsp页面,则需要添加另一个限制,允许明确访问/index.jsp文件。

+0

我需要隐藏应用程序根目录中的所有jsps(这是我的url映射的原因)。顺便说一句,使用'* .jsp'模式页面仍然可以访问。 – helloIAmPau 2014-09-26 05:45:05

+0

@helloIAmPau然后它必须是Jetty中的问题,因为* .jsp在其他容器中工作。 – Gas 2014-09-26 08:39:33

+0

是的!看到我上面的评论。 – helloIAmPau 2014-09-28 17:42:27