jeesite限制用户只能在一处登录

  1. jeesite限制用户只能在一处登录
    	/**
    	 * 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用
    	 */
    	@Override
    	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
    		Principal principal = (Principal) getAvailablePrincipal(principals);
    		// 获取当前已登录的用户
    		if (!Global.TRUE.equals(Global.getConfig("user.multiAccountLogin"))) {
    			Collection sessions = getSystemService().getSessionDao().getActiveSessions(true, principal,
    					UserUtils.getSession());
    			if (sessions.size() > 0) {
    				if (UserUtils.getSubject().isAuthenticated()) {
    					
    					//限制用户只能在一处登录start
    					for (Session session : sessions) {
    						Object obj = session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);
    						SimplePrincipalCollection coll = (SimplePrincipalCollection) obj;
    						if (coll == null) {
    							continue;
    						}
    						Principal user = (Principal) coll.getPrimaryPrincipal();
    						String username = user.getLoginName();
    						// 当第二次登录时,给出提示,禁止重复登录
    						if (principal.loginName.equals(username)) {
    							UserUtils.getSubject().logout();
    							throw new AuthenticationException("msg:该用户已在其他设备登录,禁止重复登录!!!!");
    						}
    					}
    					//限制用户只能在一处登录end
    					
    				}
    			}
    		}
    		User user = getSystemService().getUserByLoginName(principal.getLoginName());
    		if (user != null) {
    			SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
    			List list = UserUtils.getMenuList();
    			for (Menu menu : list) {
    				if (StringUtils.isNotBlank(menu.getPermission())) {
    					// 添加基于Permission的权限信息
    					for (String permission : StringUtils.split(menu.getPermission(), ",")) {
    						info.addStringPermission(permission);
    					}
    				}
    			}
    			// 添加用户权限
    			info.addStringPermission("user");
    			// 添加用户角色信息
    			for (Role role : user.getRoleList()) {
    				info.addRole(role.getEnname());
    			}
    			// 更新登录IP和时间
    			getSystemService().updateUserLoginInfo(user);
    			// 记录登录日志
    			LogUtils.saveLog(Servlets.getRequest(), "系统登录");
    			return info;
    		} else {
    			return null;
    		}
    	}

     

你可能感兴趣的:(JAVA,jeesite,shiro,限制登录,安全)