Spring Security 检查会话是否存在

        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" />

猜你喜欢

转载自longstudio.iteye.com/blog/1956647
今日推荐