WEB前端主框架(基于AJAX)按F5或者Ctrl+F5进行刷新时,框架就会自动跳转到登录首页,而不管当前用户是否已经登录过而且会话实际没有失效,带来的用户体验不是很好,为了解决这个问题,我采用的方案是在WEB主框架初始化时最开始调用一个RequestSession的请求,后台判断是否存在会话,存在则将会话信息直接返回,不存在再进入登录首页,这样不管何时进行刷新,都是执行这个判断逻辑,保证在会话信息没有失效前刷新页面都是不用再次登录的。后台判断会话信息是否存在也比较简单,控制层采用Struts2,安全框架采用Spring Security,只需判断当前HTTP请求会话中是否包含SPRING_SECURITY_CONTEXT为Key值的属性,这是Spring Security在登录校验成功后自动创建的。
核心代码如下:
ActionContext ctx = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest) ctx .get(ServletActionContext.HTTP_REQUEST); SecurityContextImpl securityContextImpl = (SecurityContextImpl) request .getSession().getAttribute("SPRING_SECURITY_CONTEXT"); if (null != securityContextImpl && null != securityContextImpl.getAuthentication()) { User userDetails = (User) securityContextImpl.getAuthentication() .getPrincipal(); //do something }
别忘了,需要在Spring Security配置中把该请求URL的权限放开,applicationContext-security.xml中添加如下内容:
<http pattern="/**/request_session" security="none" />