package com.huaheng.common.utils.security; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.bean.BeanUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.mgt.RealmSecurityManager; 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 com.huaheng.framework.shiro.realm.UserRealm; import com.huaheng.pc.system.user.domain.User; import java.util.List; /** * shiro 工具类 * * @author huaheng */ public class ShiroUtils { public static Subject getSubjct() { return SecurityUtils.getSubject(); } public static Session getSession() { return SecurityUtils.getSubject().getSession(); } public static void logout() { getSubjct().logout(); } public static User getUser() { Object obj = getSubjct().getPrincipal(); if (StringUtils.isNotNull(obj)) { User user = new User(); BeanUtils.copyBeanProp(user, obj); return user; } else { return null; } } public static void setUser(User user) { Subject subject = getSubjct(); PrincipalCollection principalCollection = subject.getPrincipals(); String realmName = principalCollection.getRealmNames().iterator().next(); PrincipalCollection newPrincipalCollection = new SimplePrincipalCollection(user, realmName); // 重新加载Principal subject.runAs(newPrincipalCollection); } public static void clearCachedAuthorizationInfo() { RealmSecurityManager rsm = (RealmSecurityManager) SecurityUtils.getSecurityManager(); UserRealm realm = (UserRealm) rsm.getRealms().iterator().next(); realm.clearCachedAuthorizationInfo(); } public static Integer getUserId() { return getUser().getId(); } public static String getLoginName() { return getUser().getLoginName(); } public static String getWarehouseCode() { return getUser().getWarehouseCode(); } public static List<Integer> getCompanyIdList() { return getUser().getCompanyIdList(); } public static List<String> getCompanyCodeList() { return getUser().getCompanyCodeList(); } public static String getIp() { return getSubjct().getSession().getHost(); } public static String getSessionId() { return String.valueOf(getSubjct().getSession().getId()); } }