应用场景: 当用户登录时在被锁定状态下异常退出,做一下处理:
/**
* <判断session超时如果超时注销session>
* <功能详细描述>
* @see [类、类#方法、类#成员]
*/
public void checkSession()
{
// 获取服务器上下文对象
ServletContext sct = palService.getServletContext();
//获取所有用户信息,并遍历用户
List<UserInfo> userList = userService.getAllUser();
for (UserInfo users : userList)
{
//根据用户ID从服务器上下文中获取session对象
HttpSession session = (HttpSession)sct.getAttribute(users.getUserID());
//如果session不为空判断用户最后一次操作是否超时,目前暂定超时时间为5分钟
if (session != null)
{
//获取session不为空的用户ID
String userID = users.getUserID();
//获取系统当前时间
long systemTime = System.currentTimeMillis();
//获取用户最后一次操作时间
long sseeionTime = session.getLastAccessedTime();
System.out.println(systemTime - sseeionTime);
//如果用户最后一次操作时间大于5分钟系统自动把用户锁解锁,并把session和ServletContext释放
if (systemTime - sseeionTime > 60000)
{
//解锁
userService.deblockingUserById(userID);
//清空session
session.removeAttribute("user");
//清空ServletContext
sct.removeAttribute(userID);
}
}
}
}
获取servletContext
@Service("palService")
public class PalpitationCheckServiceImpl implements ServletContextAware
{
private ServletContext ctx;
/**
* {@inheritDoc}
*/
@Override
public void setServletContext(ServletContext servletcontext)
{
this.ctx = servletcontext;
}
public ServletContext getServletContext()
{
return this.ctx;
}
}
ServletContextAware:在Spring中,凡是实现ServletContextAware接口的类,都可以取得ServletContext.