对于在线错误报告Web应用程序,我需要找到一种方法,任何用户都可以将错误报告(使用HTTP POST)提交到Google App Engine应用程序中的Servlet,而所有其他Servlet(应用程序管理界面)受保护,以便他们只授予已使用Google account登录的用户访问权限。应用程序在/ *运行,如果使用Google帐户保护此URL,则无需身份验证就无法使用servlet,并且似乎无法从身份验证中排除URL。
所以这应该受到保护:
<url-pattern>/*</url-pattern>
虽然这应该是公开的:
<url-pattern>/addbugreport</url-pattern>
答案 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
(映射到'/*'
)。这将以一种干净的方式将安全性与请求处理逻辑分开。