package com.huaheng.common.utils.security; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.commons.lang3.StringUtils; import com.huaheng.common.constant.PermissionConstants; import com.huaheng.common.utils.MessageUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; /** * permission 工具类 * * @author huaheng */ public class PermissionUtils { private static final Logger log = LoggerFactory.getLogger(PermissionUtils.class); /** * 权限错误消息提醒 * * @param permissionsStr 错误信息 * @return */ public static String getMsg(String permissionsStr) { String permission = StringUtils.substringBetween(permissionsStr, "[", "]"); String msg = MessageUtils.message("no.view.permission", permission); if (StringUtils.endsWithIgnoreCase(permission, PermissionConstants.ADD_PERMISSION)) { msg = MessageUtils.message("no.create.permission", permission); } else if (StringUtils.endsWithIgnoreCase(permission, PermissionConstants.EDIT_PERMISSION)) { msg = MessageUtils.message("no.update.permission", permission); } else if (StringUtils.endsWithIgnoreCase(permission, PermissionConstants.REMOVE_PERMISSION)) { msg = MessageUtils.message("no.delete.permission", permission); } else if (StringUtils.endsWithIgnoreCase(permission, PermissionConstants.EXPORT_PERMISSION)) { msg = MessageUtils.message("no.export.permission", permission); } else if (StringUtils.endsWithAny(permission, new String[] { PermissionConstants.VIEW_PERMISSION, PermissionConstants.LIST_PERMISSION })) { msg = MessageUtils.message("no.view.permission", permission); } return msg; } /** * 返回用户属性值 * * @param property 属性名称 * @return 用户属性值 */ public static Object getPrincipalProperty(String property) { Subject subject = SecurityUtils.getSubject(); if (subject != null) { Object principal = subject.getPrincipal(); try { BeanInfo bi = Introspector.getBeanInfo(principal.getClass()); for (PropertyDescriptor pd : bi.getPropertyDescriptors()) { if (pd.getName().equals(property) == true) { return pd.getReadMethod().invoke(principal, (Object[]) null); } } } catch (Exception e) { log.error("Error reading property [{}] from principal of type [{}]", property, principal.getClass().getName()); } } return null; } }