我正在研究GWT。在我的应用程序中,我想在没有执行任何操作(包括鼠标事件)的情况下在2分钟后添加会话时间。
我写了一个用过GWT会话对象的类。
public static boolean ValidSession(HttpSession session) {
boolean aResult = true;
logger.debug("Start of ValidSession");
try
{
if(session!=null )
{
String strUserInf="";
strUserInf=(String)session.getAttribute("userInf");
logger.debug("User Inf in session is: " + strUserInf);
if(strUserInf==null || strUserInf.trim().equals(""))
{
logger.debug("User Info blank");
aResult =false;
}
}
else
{
logger.debug("SessionNull");
aResult=false;
}
}
catch (Exception e)
{
logger.error("Exception in ValidSession: ", e);
aResult = false;
}
logger.debug("End of isSessionValid");
return aResult;
}
public static void TimeUpdate(HttpSession session){
session.setAttribute("lastAccessed", String.valueOf(session.getLastAccessed()));
System.out.println("lastAccessed "+ session.getAttribute("lastAccessed"));
}
但它仅在RPC调用时重置计时器。我也想检测鼠标移动。
有人可以提出解决方案吗?提前谢谢。
答案 0 :(得分:4)
您可以在模块加载时执行类似的代码。
创建一个每2分钟运行一次的计时器并设置会话到期时间:
private static Timer SESSION_TIMER = new Timer() {
public void run() {
SessionFactory.putValue(SesisonKey.SESSION_EXPIRED,
true);
}
};
使用此方法调用此方法重新启动计时器会话,如下所示:
public static void renewTimer() {
if (CLIENT_SIDE_TIMER != null) {
CLIENT_SIDE_TIMER.cancel();
SessionFactory.getClientInstance().put(
SesisonKey.SESSION_EXPIRED, false);
//CLIENT_SIDE_TIMER.schedule(250 * 60 * 20);
//1 Minute = 60000 Milliseconds
CLIENT_SIDE_TIMER.schedule(60000 * 2);
}
}
NativePreviewHandler处理程序捕获鼠标事件并检查该会话是否已过期。
final NativePreviewHandler nativeHandler = new NativePreviewHandler() {
@Override
public void onPreviewNativeEvent(NativePreviewEvent event) {
preventBack();
if (SessionFactory
.getValue(SesisonKey.CLIENT_SESSION_EXPIRED) != null) {
boolean expire = (Boolean) SessionFactory
.getValue(SesisonKey.CLIENT_SESSION_EXPIRED);
if (expire) {
boolean show= false;
//logout session code
ClientSideTimers.renewSessionTimer();
}
}
}
};
Event.addNativePreviewHandler(nativeHandler);
如果您的屏幕稳定2分钟而不是它将通过计时器使会话变量值失效,如果值为false,则执行注销。
SESSION_EXPIRED是会话过期检查的常量变量,而不是SessionFactory是我的自定义工厂代码。你只是忽略我用过的varibles我的项目模式。你必须只设置一个不超过它的常量。如果还有任何查询,请告诉我。