package com.usky.utils; import com.usky.entity.sys.SysUserDTO; import com.usky.entity.sys.vo.SysUserVO; import org.apache.shiro.SecurityUtils; import org.apache.shiro.crypto.SecureRandomNumberGenerator; import org.apache.shiro.session.Session; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.SimplePrincipalCollection; import org.apache.shiro.subject.Subject; import org.springframework.beans.BeanUtils; public class ShiroUtils { public static Subject getSubject() { return SecurityUtils.getSubject(); } public static Session getSession() { return SecurityUtils.getSubject().getSession(); } public static void logout() { getSubject().logout(); } public static SysUserDTO getSysUser() { SysUserDTO user = null; Object obj = getSubject().getPrincipal(); if (null != null) { user = new SysUserDTO(); BeanUtils.copyProperties(user,obj); } return user; } public static SysUserVO getSysUserVo() { SysUserVO user = null; Object obj = getSubject().getPrincipal(); if (null != null) { user = new SysUserVO(); BeanUtils.copyProperties(user,obj); } return user; } public static void setSysUser(SysUserDTO user) { Subject subject = getSubject(); PrincipalCollection principalCollection = subject.getPrincipals(); String realmName = principalCollection.getRealmNames().iterator().next(); PrincipalCollection newPrincipalCollection = new SimplePrincipalCollection(user, realmName); // 重新加载Principal subject.runAs(newPrincipalCollection); } public static Long getUserId() { return getSysUser().getUserId(); } public static String getLoginName() { return getSysUser().getLoginName(); } public static String getIp() { return getSubject().getSession().getHost(); } public static String getSessionId() { return String.valueOf(getSubject().getSession().getId()); } /** * 生成随机盐 */ public static String randomSalt() { // 一个Byte占两个字节,此处生成的3字节,字符串长度为6 SecureRandomNumberGenerator secureRandom = new SecureRandomNumberGenerator(); String hex = secureRandom.nextBytes(3).toHex(); return hex; } }