Shiro一处登录与退出

Shiro一处登录与退出

退出

	@RequestMapping("/loginout")
    public String loginOut(){
        Subject sub = SecurityUtils.getSubject();
        sub.logout();
        return  "userlogin ";
    }
    

一处登录

一处登录指的是用户只能在一台设备上登录,如果在另一台设备登录 则需要处理(先前用户退出)

实现方法.在认证之前看一下sessionDao中有没有这个用户的session

SessionDao在config配置的时候已经注入到springIOC了 注入即可

修改 realm包下 UserRealm 类的身份认证方法

//身份认证
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken auth) throws AuthenticationException {
        log.info("进入到认证里面");
        //获取到本体  就是username
        String username = (String) auth.getPrincipal();
        String userpassword = new String((char[])auth.getCredentials());
        log.info("username :"+username);
        //再认证之前 查看是否已经登录
        Collection<Session> sessions = sessionDAO.getActiveSessions();
        for(Session session:sessions) {
            //用户  也就是   auth.getPrincipal();得到的信息
            Object o = session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);
            //是否已经登录
            session.getAttribute(DefaultSubjectContext.AUTHENTICATED_SESSION_KEY);
            //判断session 是否存在
            if(username.equals(String.valueOf(o))){
                //将其下线
                session.setTimeout(0);
                //或者
                sessionDAO.delete(session);

            }

        }
        //接下来通过username在数据库拿到用户信息
        //在判断用户密码对不对

        //模拟 如果用户名大于5就存在这个用户
        if(username.length()<5)return null;
        // 模拟查询到用户密码为 ******
        String DBpassword = "we1234567";

        //顺序为 用户名   数据库中的密码  用户填写的密码   直接返回即可
        return new SimpleAuthenticationInfo(username,DBpassword,userpassword);
    }

版权声明:本文为qq_35752835原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。