授予对一个GAE servlet的公共访问权限,但对所有其他资源使用身份验证?

时间:2010-01-13 19:04:15

标签: java google-app-engine authentication servlets

对于在线错误报告Web应用程序,我需要找到一种方法,任何用户都可以将错误报告(使用HTTP POST)提交到Google App Engine应用程序中的Servlet,而所有其他Servlet(应用程序管理界面)受保护,以便他们只授予已使用Google account登录的用户访问权限。应用程序在/ *运行,如果使用Google帐户保护此URL,则无需身份验证就无法使用servlet,并且似乎无法从身份验证中排除URL。

所以这应该受到保护:

<url-pattern>/*</url-pattern>

虽然这应该是公开的:

<url-pattern>/addbugreport</url-pattern>
  • 只是一个解决方法的想法:应用程序中的所有servlet(公共除外)都可以检查用户是否已登录(如果未登录则转发到登录页面)

2 个答案:

答案 0 :(得分:1)

将受保护资源放在与公共不同的上下文(目录)中(在web.xml中使用servlet-mapping)。如果公共资源位于'/',请将受保护的文件放在'/admin'中,并仅为该上下文定义security-contraint(也在web.xml中)。

<security-constraint>
  <web-resource-collection>
    <web-resource-name>admin resources</web-resource-name>
    <url-pattern>/admin/*</url-pattern>
    <http-method>*</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
  </auth-constraint>
</security-constraint>

如果向应用程序添加更多受保护的上下文,则还需要为它们定义安全性约束。

答案 1 :(得分:1)

如果url-patterns比声明性安全更重要;将用户检查实现为servlet Filter(映射到'/*')。这将以一种干净的方式将安全性与请求处理逻辑分开。