java - Google App Engine 上的 Stripes 问题

标签 java google-app-engine stripes

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

Here's how it is.

Someone (quite possibly the Stripes Dispatcher) needed to get the source page resolution. But no source page was supplied in the request, and unless you override ActionBeanContext.getSourcePageResolution() you're going to need that value. When you use a tag a hidden field called '_sourcePage' is included. If you write your own forms or links that could generate validation errors, you must include a value for this parameter. This can be done by calling request.getServletPath()."

我已经使用表单检查了页面的源代码,并且隐藏的输入字段 _sourcePage 按应有的方式出现在表单中。该字段的值似乎以某种方式加密。

最佳答案

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

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

这在传统的应用服务器上不一定是问题,而且它会受到安全增强的欢迎,因为 key 会不时更改。

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

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

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

关于java - Google App Engine 上的 Stripes 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7778151/

相关文章:

java - Eclipse 无法理解我编辑了一个类

java - 使用谷歌应用引擎发送电子邮件

google-app-engine - 如何对重叠时间范围的 Google App Engine 数据存储进行最佳查询

python - 在 python 中使用 IOT 适配器和 google pub/sub api 将 MQTT 与 GCP 集成

Java Web 应用程序错误 - 无法理解为什么现在会发生

java - Mule:如何跟踪不可删除和不可移动的文件

java - 访问被拒绝发现属性“ro.sf.lcd_密度

python - 如何重新格式化 URL 以使其更安静(从 .../?id=123 到 .../123)?

javascript - 从 Stripes action bean jquery 中转义单引号/双引号

jsp - stripes 框架中的占位符标签