2010-01-13 52 views
1

对于在线错误报告Web应用程序,我需要找到任何用户如何向Google App Engine应用程序中的Servlet提交错误报告(使用HTTP POST)的方式,而所有其他Servlet(应用程序管理界面)均为受保护的,以便它们只允许访问使用Google account登录的用户。该应用程序在/ *处运行,并且如果使用Google帐户保护此URL,则没有身份验证的servlet将不可用,并且似乎无法从身份验证中排除URL。授予公众对一个GAE servlet的访问权限,但对所有其他资源使用身份验证?

所以这应该是受保护的:

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

虽然这应该是公开的:

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

回答

1

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

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> 

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

+0

看到我的编辑,实际上我想让受保护的管理界面位于/并将公共的可用servlet放在/ newbugreport - 但也许只能放弃此计划并遵循您的建议,所以+1 – mjn 2010-01-16 21:39:27

+0

如果url模式比声明式安全更重要;将用户检查作为servlet Filter(映射到'/ *')来实现。这将以一种干净的方式将安全性与请求处理逻辑分开。 – mafro 2010-01-17 09:18:05

+0

好主意 - 它是一个Wicket应用程序,所以它已经是一个过滤器,并且向它添加一些安全逻辑代码应该很容易。您能否将您的评论添加为答案,以便我可以接受它? – mjn 2010-01-17 13:26:42

相关问题