谷歌App Engine问题上的条纹

时间:2011-10-15 13:40:42

标签: java google-app-engine stripes

我在Google App Engine的应用程序中遇到Stripes表单的问题。 我有一个带有Stripes表单标签的JSP页面。当我提交表单并在其中一个字段上发生验证错误时,Stripes会向我显示一个屏幕,其中包含以下通知:

  

这是怎么回事。

     

有人(很可能是Stripes Dispatcher)需要得到   源页面分辨率。但是没有提供源页面   请求,除非你覆盖   ActionBeanContext.getSourcePageResolution()你将需要它   值。当您使用标记时,名为“_sourcePage”的隐藏字段为   包括在内。如果您编写自己的表单或可能生成的链接   验证错误,您必须包含此参数的值。这个   可以通过调用request.getServletPath()来完成。“

我已经检查了带有表单的页面源,隐藏的输入字段_sourcePage在表单中应该存在。该字段的价值似乎以某种方式加密。

1 个答案:

答案 0 :(得分:5)

发送到客户端的值(隐藏表单字段等)的加密是Stripes功能之一,这是导致问题的原因。

加密和解密值Stripes使用在名为Stripes.EncryptionKey的配置属性中指定的密钥。 此属性没有默认值,因此如果未指定,Stripes将每次生成随机密钥 应用程序已初始化。

这不一定是传统应用服务器上的问题,而且可以欢迎安全性增强,因为 密钥不时更改。

另一方面,在Google App Engine上,这是一个主要问题。在GAE上无法保证 一个用户会话范围内的后续请求将由具有相同生成密钥的同一应用程序提供。 App Engine可以决定随时关闭任何正在运行的应用程序实例,如果下一个请求到来,则可以 将启动另一个实例来提供请求(这称为“冷启动”)。这个新实例将具有新生成的密钥。 结果是,应用程序将尝试用不同的密钥解密值,当然也不会加密 没有这样做。

在这种情况下,Stripes会记录一条警告“输入未使用当前加密密钥加密:”并且表现为它尝试解密的参数根本不存在 (见net.sourceforge.stripes.util.CryptoUtil)。在你的情况下,它意味着它的行为是_sourcePage参数不存在和 这就是为什么它会在出现验证错误时显示“这就是它”的原因。

因此,如果您在Google App Engine上使用Stripes,则应将一些随机值设置为配置属性Stripes.EncryptionKey。