luk*_*vic 2 java google-app-engine stripes
我在Google App Engine的应用程序中遇到Stripes表单的问题.我有一个带有Stripes表单标签的JSP页面.当我提交表单并在其中一个字段上发生验证错误时,Stripes会向我显示一个屏幕,其中包含以下通知:
这是怎么回事.
有人(很可能是Stripes Dispatcher)需要获得源页面解析.但是请求中没有提供源页面,除非您重写ActionBeanContext.getSourcePageResolution(),否则您将需要该值.使用标记时,会包含名为"_sourcePage"的隐藏字段.如果您编写自己的表单或可能生成验证错误的链接,则必须包含此参数的值.这可以通过调用request.getServletPath()来完成."
我已检查页面的源与窗体和隐藏的输入字段_sourcePage存在于应有的形式.该字段的价值似乎以某种方式加密.
发送到客户端的值(隐藏表单字段等)的加密是Stripes功能之一,这是问题的原因.
加密和解密值Stripes使用在名为Stripes.EncryptionKey的配置属性中指定的密钥.此属性没有默认值,因此如果未指定,Stripes将在每次初始化应用程序时生成随机密钥.
这不一定是传统应用服务器上的问题,而且可以欢迎安全性增强,因为密钥会不时变化.
另一方面,在Google App Engine上,这是一个主要问题.在GAE上,无法保证一个用户会话范围内的后续请求将由具有相同生成密钥的同一应用程序提供.App Engine可以决定随时关闭任何正在运行的应用程序实例,如果下一个请求到来,它将启动另一个实例来提供请求(这称为"冷启动").这个新实例将具有新生成的密钥.结果是应用程序将尝试使用与加密时不同的密钥来解密值,当然也不会这样做.
在这种情况下,Stripes会记录一条警告"输入未使用当前加密密钥加密:"并且表现为它尝试解密的参数根本不存在(请参阅net.sourceforge.stripes.util.CryptoUtil).在你的情况下,它意味着它的行为是_sourcePage参数不存在,这就是为什么它显示"这是它是如何"屏幕,如果发生验证错误.
因此,如果您在Google App Engine上使用Stripes,则应将一些随机值设置为配置属性Stripes.EncryptionKey.
| 归档时间: |
|
| 查看次数: |
1376 次 |
| 最近记录: |