我们在GWT应用程序中使用基于表单的身份验证,目前我正在努力解决会话超时问题。
如果用户已登录并执行将在会话超时后触发静态资源请求的操作,则会显示登录页面,当用户再次登录时,则仅显示图像资源给用户。例如,如果用户将鼠标悬停在按钮上,则该按钮需要获取鼠标悬停时显示的图标。
这是合乎逻辑的,因为登录页面是由图像请求触发的,但实际上并不是我们想要的行为。将用户重定向到他所在的页面或者另一个页面会更好。
如何以更好的方式处理?据我了解,更改重定向网址非常困难,j_security_check在成功登录后用于重定向用户。
答案 0 :(得分:0)
我解决它的方法是仅使用<security-constraint>
保护HTML 主页。静态资源(图像,样式表,GWT脚本)根本不受保护,并且AJAX端点(GWT-RPC,RequestFactoryServlet或使用来自应用程序的AJAX调用的其他端点)仅检查用户Principal
是否存在请求(这可以在servlet过滤器或RequestFactory ServiceLayerDecorator
中完成),否则返回错误(但不要触发登录页面)。
您可以看到示例web.xml
here,其中包含处理RequestFactory here中安全性的代码(以及处理客户端here响应的代码)。对于GWT-RPC,您可能需要使用servlet过滤器和自定义RpcRequestBuilder
或基本AsyncCallback<?>
实现。