Jelajahi Sumber

架构修改前备份

laowo 4 tahun lalu
induk
melakukan
60464cd866

+ 0 - 2
pom.xml

@@ -80,8 +80,6 @@
             <artifactId>shiro-spring</artifactId>
             <version>1.5.2</version>
         </dependency>
-
-
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>

+ 3 - 4
src/main/java/com/usky/config/mqtt/config/MqttAutoConfiguration.java

@@ -1,7 +1,7 @@
 package com.usky.config.mqtt.config;
 import com.usky.config.mqtt.config.MqttProperties.Config;
 import com.usky.config.mqtt.config.MqttProperties.Will;
-import com.usky.utils.mqtt.MqttUtils;
+import com.usky.utils.MD5Utils;
 import lombok.extern.log4j.Log4j2;
 import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
 import org.springframework.beans.BeansException;
@@ -25,7 +25,6 @@ import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
 import org.springframework.messaging.MessageChannel;
 
 import java.io.UnsupportedEncodingException;
-import java.util.Map;
 
 /**
  * mqtt配置
@@ -67,11 +66,11 @@ public class MqttAutoConfiguration implements ApplicationContextAware, BeanPostP
 
         // 默认开启consumer
         if (!Boolean.FALSE.equals(config.getProducerEnable())) {
-            String handlerBeanName = channelName + MqttUtils.CHANNEL_NAME_SUFFIX;
+            String handlerBeanName = channelName + MD5Utils.MqttUtils.CHANNEL_NAME_SUFFIX;
             beanFactory.registerBeanDefinition(handlerBeanName, mqttOutbound(config));
             log.info("初始化mqtt MqttPahoMessageHandler");
 
-            MqttUtils.put(channelName, beanFactory.getBean(handlerBeanName, MqttPahoMessageHandler.class));
+            MD5Utils.MqttUtils.put(channelName, beanFactory.getBean(handlerBeanName, MqttPahoMessageHandler.class));
         }
     }
 

+ 38 - 24
src/main/java/com/usky/config/shiro/MyRealm.java

@@ -1,8 +1,11 @@
 package com.usky.config.shiro;
 
 
-import com.usky.entity.sys.SysUserDTO;
+import com.usky.entity.sys.vo.SysUserVO;
+import com.usky.service.menuService.MenuService;
 import com.usky.service.user.LoginService;
+import com.usky.service.user.UserService;
+import com.usky.utils.ShiroUtils;
 import org.apache.shiro.authc.*;
 import org.apache.shiro.authz.AuthorizationInfo;
 import org.apache.shiro.authz.SimpleAuthorizationInfo;
@@ -13,51 +16,62 @@ import org.apache.shiro.util.SimpleByteSource;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 
+import java.util.HashSet;
 import java.util.Set;
 
+
 /**
- * 和数据库交互 看看用户信息 权限信息
+ * @author laowo
  */
 public class MyRealm extends AuthorizingRealm {
-    @Lazy
+
     @Autowired
+    @Lazy
     private LoginService loginService;
-
+    @Autowired
+    @Lazy
+    private UserService userService;
+    @Autowired
+    @Lazy
+    private MenuService menuService;
     //获取权限信息的方法
     @Override
     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
-        System.out.println("走了权限查询方法");
-        SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
-        //获取用户名
-        SysUserDTO administrator = (SysUserDTO) principals.getPrimaryPrincipal();//此Principal就是彼Principal(认证时构造的)
-        String username = administrator.getLoginName();
-        //从数据库查询用户的权限和角色
-        // Set<String> roles = loginService.findRolesByUsername(username);
-        //   if(roles != null && roles.size() > 0){
-        //       simpleAuthorizationInfo.addRoles(roles);
-        //   }
-        //   Set<String> permissions = adminService.findPermissionsByUsername(username);
-        //   if(permissions != null && permissions.size() > 0){
-        //       simpleAuthorizationInfo.addStringPermissions(permissions);
-        //   }
-        //   return simpleAuthorizationInfo;
-        return null;
+        SysUserVO user = ShiroUtils.getSysUserVo();
+        // 角色列表
+        Set<String> roles = new HashSet<String>();
+        // 功能列表
+        Set<String> menus = new HashSet<String>();
+        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
+        // 管理员拥有所有权限
+        if (user.isAdmin()) {
+            info.addRole("admin");
+            info.addStringPermission("*:*:*");
+        } else {
+
+            roles = userService.queryRoleKeys(user.getUserId());
+                 menus = menuService.qyeryPermsByUserId(user.getUserId());
+            // 角色加入AuthorizationInfo认证对象
+            info.setRoles(roles);
+            // 权限加入AuthorizationInfo认证对象
+            info.setStringPermissions(menus);
+        }
+        return info;
     }
 
-    //获取认证信息的方法
+    //登录认证
     @Override
     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
         //token是封装好的用户提交的用户名密码
         String username = ((UsernamePasswordToken) token).getUsername();
         //获取用户
-        SysUserDTO user = loginService.findUserByUsername(username);
+        SysUserVO user = loginService.findUserByUsername(username);
         if (user == null) {
             return null;
         } else {
             //封装AuthenticationInfo
             ByteSource bsSalt = new SimpleByteSource(user.getSalt());
-            SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user, user.getPassword(), bsSalt, getName());
-            return authenticationInfo;
+            return new SimpleAuthenticationInfo(user, user.getPassword(), bsSalt, getName());
         }
     }
 }

+ 22 - 34
src/main/java/com/usky/config/shiro/ShiroConfig.java

@@ -10,8 +10,6 @@ import org.apache.shiro.session.mgt.SessionManager;
 import org.apache.shiro.session.mgt.eis.SessionDAO;
 import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
 import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
-import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition;
-import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition;
 import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
 import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
 import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
@@ -20,14 +18,17 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.core.annotation.Order;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
 
 /**
  *
+ * @author laowo
  */
 @Configuration
+@Order(-1)
 public class ShiroConfig {
     //shiroFilter
     @Bean
@@ -38,10 +39,9 @@ public class ShiroConfig {
         shiroFilterFactoryBean.setLoginUrl("/sys/login");
         //控制 访问xx资源 需要xx权限
         Map<String, String> filterChainMap = new LinkedHashMap<>();
-
         //swagger接口权限 开放
         filterChainMap.put("/doc.html", "anon");
-        filterChainMap.put("/webjars/**/**","anon");
+        filterChainMap.put("/webjars/**/**", "anon");
         filterChainMap.put("/swagger-ui.html", "anon");
         filterChainMap.put("/webjars/**", "anon");
         filterChainMap.put("/v2/**", "anon");
@@ -53,33 +53,29 @@ public class ShiroConfig {
         //swagger接口权限 开放
         filterChainMap.put("/**", "authc");
         shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainMap);
-
         return shiroFilterFactoryBean;
     }
 
     //安全管理器
     @Bean
-    @Lazy
-    public SecurityManager securityManager() {
+    public SecurityManager securityManager(@Qualifier("myRealm") Realm myRealm, @Qualifier("sessionManager") SessionManager sessionManager) {
         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-        securityManager.setSessionManager(sessionManager());
-        securityManager.setRealm(myRealm());
+        securityManager.setSessionManager(sessionManager);
+        securityManager.setRealm(myRealm);
         return securityManager;
     }
 
+    //缓存管理
+    @Bean(name = "mycacheManager")
+    public CacheManager mycacheManager() {
+        return new MyRedisCacheManager();
+    }
 
-//    @Bean("SecurityManager")
-//    public SecurityManager securityManager() {
-//        DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
-//        //     DefaultWebSecurityManager defaultWebSecurityManager = SpringUtil.getBean(DefaultWebSecurityManager.class);
-//        //关联Reaml
-//        // ApplicationContext().getBean()
-//        defaultWebSecurityManager.setRealm(getRealm());
-//        return defaultWebSecurityManager;
-//    }
 
-    @Bean
-    public Realm myRealm() {
+
+
+    @Bean(name = "myRealm")
+    public Realm myRealm(@Qualifier("mycacheManager") CacheManager mycacheManager) {
         MyRealm myRealm = new MyRealm();
         //告诉realm密码匹配方式
         myRealm.setCredentialsMatcher(credentialsMatcher());
@@ -87,16 +83,10 @@ public class ShiroConfig {
         myRealm.setAuthorizationCachingEnabled(true);
         myRealm.setAuthenticationCachingEnabled(false);
         //设置缓存管理器
-        myRealm.setCacheManager(MycacheManager());
+        myRealm.setCacheManager(mycacheManager);
         return myRealm;
     }
 
-    //缓存管理
-    @Bean
-    public CacheManager MycacheManager() {
-        MyRedisCacheManager cacheManager = new MyRedisCacheManager();
-        return cacheManager;
-    }
 
     @Bean
     public CredentialsMatcher credentialsMatcher() {
@@ -135,25 +125,23 @@ public class ShiroConfig {
      * @return
      */
     @Bean
-    public SessionManager sessionManager() {
+    public SessionManager sessionManager(@Qualifier("redisSessionDAO") SessionDAO redisSessionDAO) {
         DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
-        sessionManager.setSessionDAO(redisSessionDAO());
-
+        sessionManager.setSessionDAO(redisSessionDAO);
         //设置会话过期时间
         sessionManager.setGlobalSessionTimeout(3 * 60 * 1000); //默认半小时
         sessionManager.setDeleteInvalidSessions(true); //默认自定调用SessionDAO的delete方法删除会话
         //设置会话定时检查
-        //        sessionManager.setSessionValidationInterval(180000); //默认一小时
-        //        sessionManager.setSessionValidationSchedulerEnabled(true);
+        sessionManager.setSessionValidationInterval(180000); //默认一小时
+        sessionManager.setSessionValidationSchedulerEnabled(true);
         return sessionManager;
     }
 
-    @Bean
+    @Bean(name = "redisSessionDAO")
     public SessionDAO redisSessionDAO() {
         ShiroRedisSessionDao redisDAO = new ShiroRedisSessionDao();
         return redisDAO;
     }
 
 
-
 }

+ 2 - 0
src/main/java/com/usky/entity/sys/SysUserDTO.java

@@ -250,6 +250,8 @@ public class SysUserDTO implements Serializable {
         this.remark = remark;
     }
 
+
+
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;

+ 8 - 0
src/main/java/com/usky/entity/sys/vo/SysUserVO.java

@@ -59,5 +59,13 @@ public class SysUserVO {
     private Timestamp updateTime;
     @ApiModelProperty("备注")
     private String remark;
+    public boolean isAdmin()
+    {
+        return isAdmin(this.userId);
+    }
 
+    public static boolean isAdmin(Long userId)
+    {
+        return userId != null && 1L == userId;
+    }
 }

+ 19 - 0
src/main/java/com/usky/service/menuService/MenuService.java

@@ -0,0 +1,19 @@
+package com.usky.service.menuService;
+
+import java.util.Set;
+
+/**
+ * @author laowo
+ * @version v1.0
+ * @date 2021/8/23 15:11
+ * @description TODO
+ **/
+public interface MenuService {
+    /**
+     * 根据用户id查询权限
+     *
+     * @param userId 用户id
+     * @return
+     */
+    public Set<String> qyeryPermsByUserId(long userId);
+}

+ 48 - 0
src/main/java/com/usky/service/menuService/MenuServiceImpl.java

@@ -0,0 +1,48 @@
+package com.usky.service.menuService;
+
+import com.usky.dao.impl.BaseDaoImpl;
+import com.usky.entity.sys.SysMenuDTO;
+import com.usky.entity.sys.SysRoleDTO;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.annotation.SuppressAjWarnings;
+import org.hibernate.transform.Transformers;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author laowo
+ * @version v1.0
+ * @date 2021/8/23 15:13
+ * @description TODO
+ **/
+@Service
+public class MenuServiceImpl extends BaseDaoImpl implements MenuService {
+    @Override
+    public Set<String> qyeryPermsByUserId(long userId) {
+        @SuppressWarnings("all")
+        String sql = "SELECT DISTINCT\n" +
+                "\tm.perms \n" +
+                "FROM\n" +
+                "\tsys_menu m\n" +
+                "\tLEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id\n" +
+                "\tLEFT JOIN sys_user_role ur ON rm.role_id = ur.role_id\n" +
+                "\tLEFT JOIN sys_role r ON r.role_id = ur.role_id \n" +
+                "WHERE\n" +
+                "\tm.visible = '0' \n" +
+                "\tAND r.STATUS = '0' AND ur.user_id = " + userId + "";
+        List<String> perms = getSession().createSQLQuery(sql).list();
+
+
+        Set<String> permsSet = new HashSet<>();
+        for (String perm : perms) {
+            if (StringUtils.isNotBlank(perm)) {
+                permsSet.addAll(Arrays.asList(perm.trim().split(",")));
+            }
+        }
+        return permsSet;
+    }
+}

+ 6 - 1
src/main/java/com/usky/service/user/LoginService.java

@@ -1,6 +1,9 @@
 package com.usky.service.user;
 
 import com.usky.entity.sys.SysUserDTO;
+import com.usky.entity.sys.vo.SysUserVO;
+
+import java.util.Set;
 
 /**
  * @author laowo
@@ -12,5 +15,7 @@ public interface LoginService {
      * @param username
      * @return
      */
-    SysUserDTO findUserByUsername(String username);
+    SysUserVO findUserByUsername(String username);
+
+
 }

+ 12 - 3
src/main/java/com/usky/service/user/LoginServiceImpl.java

@@ -2,13 +2,20 @@ package com.usky.service.user;
 
 
 import com.usky.dao.impl.BaseDaoImpl;
+import com.usky.entity.sys.SysRoleDTO;
 import com.usky.entity.sys.SysUserDTO;
+import com.usky.entity.sys.vo.SysUserVO;
 import com.usky.exception.user.UserPasswordNotMatchException;
+import com.usky.utils.BeanHelp;
 import com.usky.utils.ListUtil;
+import org.apache.commons.lang.StringUtils;
+import org.hibernate.transform.Transformers;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author laowo
@@ -20,12 +27,14 @@ import java.util.List;
 public class LoginServiceImpl extends BaseDaoImpl implements LoginService {
     @Override
     @SuppressWarnings("unchecked")
-    public SysUserDTO findUserByUsername(String username) {
+    public SysUserVO findUserByUsername(String username) {
 
         List<SysUserDTO> list = getSession().createQuery("from SysUserDTO where loginName ='" + username + "'").list();
         if (ListUtil.isBlank(list)) {
             throw new UserPasswordNotMatchException();
         }
-        return list.get(0);
+        List<SysUserVO> sysUserVOS = BeanHelp.copyWithCollection(list, SysUserVO.class);
+        return sysUserVOS.get(0);
     }
+
 }

+ 10 - 0
src/main/java/com/usky/service/user/UserService.java

@@ -2,6 +2,8 @@ package com.usky.service.user;
 
 import com.usky.entity.sys.SysUserDTO;
 
+import java.util.Set;
+
 /**
  * @author laowo
  */
@@ -12,4 +14,12 @@ public interface UserService {
      * @param user
      */
     void addUser(SysUserDTO user);
+
+    /**
+     * 根据用户Id查询角色
+     *
+     * @param userId
+     * @return
+     */
+    Set<String> queryRoleKeys(long userId);
 }

+ 36 - 0
src/main/java/com/usky/service/user/UserServiceImpl.java

@@ -1,12 +1,18 @@
 package com.usky.service.user;
 
 import com.usky.dao.impl.BaseDaoImpl;
+import com.usky.entity.sys.SysRoleDTO;
 import com.usky.entity.sys.SysUserDTO;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.shiro.crypto.hash.Md5Hash;
+import org.hibernate.transform.Transformers;
 import org.springframework.stereotype.Service;
 
 import java.sql.Timestamp;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 /**
  * @author laowo
@@ -27,4 +33,34 @@ public class UserServiceImpl extends BaseDaoImpl implements UserService {
         user.setCreateTime(new Timestamp(System.currentTimeMillis()));
         getSession().save(user);
     }
+
+
+    @Override
+    @SuppressWarnings("all")
+    public Set<String> queryRoleKeys(long userId) {
+        String sql = "SELECT DISTINCT\n" +
+                "\tr.role_id AS roleId,\n" +
+                "\tr.role_name AS roleName,\n" +
+                "\tr.role_key AS roleKey,\n" +
+                "\tr.role_sort AS role_sort,\n" +
+                "\tr.data_scope AS dataScope,\n" +
+                "\tr.STATUS AS `status`,\n" +
+                "\tr.del_flag AS delFlag,\n" +
+                "\tr.create_time AS createTime,\n" +
+                "\tr.remark \n" +
+                "FROM\n" +
+                "\tsys_role r\n" +
+                "\tLEFT JOIN sys_user_role ur ON ur.role_id = r.role_id\n" +
+                "\tLEFT JOIN sys_user u ON u.user_id = ur.user_id\n" +
+                "\tLEFT JOIN sys_dept d ON u.dept_id = d.dept_id WHERE r.del_flag = '0' and ur.user_id = " + userId + "";
+        List<SysRoleDTO> perms = getSession().createSQLQuery(sql)
+                .setResultTransformer(Transformers.aliasToBean(SysRoleDTO.class)).list();
+        Set<String> permsSet = new HashSet<>();
+        for (SysRoleDTO perm : perms) {
+            if (perm != null) {
+                permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
+            }
+        }
+        return permsSet;
+    }
 }

+ 150 - 0
src/main/java/com/usky/utils/MD5Utils.java

@@ -1,8 +1,18 @@
 package com.usky.utils;
 
+import lombok.extern.log4j.Log4j2;
+import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
+import org.springframework.integration.mqtt.support.MqttHeaders;
+import org.springframework.integration.support.MessageBuilder;
+import org.springframework.messaging.Message;
+
 import java.io.UnsupportedEncodingException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -96,4 +106,144 @@ public class MD5Utils {
         return str;
     }
 
+    /**
+     * mqtt工具类,可以根据通道名称发送消息
+     */
+    @Log4j2
+    public static class MqttUtils {
+
+        /**
+         * qos 0
+         */
+        public static final int QOS_0 = 0;
+        /**
+         * qos 1
+         */
+        public static final int QOS_1 = 1;
+        /**
+         * qos 2
+         */
+        public static final int QOS_2 = 2;
+
+        private final static Map<String, MqttPahoMessageHandler> HANDLER_MAP = new HashMap<>(16);
+        public final static String CHANNEL_NAME_SUFFIX = "MqttPahoMessageHandler";
+
+        /**
+         * 存放handler
+         *
+         * @param channelName
+         * @param handler
+         */
+        public static void put(String channelName, MqttPahoMessageHandler handler) {
+            HANDLER_MAP.put(channelName + CHANNEL_NAME_SUFFIX, handler);
+        }
+
+        /**
+         * 发送消息
+         *
+         * @param topic       要发送的主题
+         * @param message     消息内容
+         * @param qos         qos级别
+         * @param channelName 发送到指定的通道
+         */
+        public static void sendMessage(String topic, String message, int qos, String channelName) {
+            MqttPahoMessageHandler handler = getHandler(channelName);
+            Message<String> mqttMessage = MessageBuilder.withPayload(message).setHeader(MqttHeaders.TOPIC, topic)
+                    .setHeader(MqttHeaders.QOS, qos).build();
+            handler.handleMessage(mqttMessage);
+        }
+
+        /**
+         * 发送消息,默认qos级别为1
+         *
+         * @param topic       要发送的主题
+         * @param message     消息内容
+         * @param channelName 发送到指定的通道
+         */
+        public static void sendMessage(String topic, String message, String channelName) {
+            MqttPahoMessageHandler handler = getHandler(channelName);
+            Message<String> mqttMessage = MessageBuilder.withPayload(message).setHeader(MqttHeaders.TOPIC, topic)
+                    .setHeader(MqttHeaders.QOS, QOS_1).build();
+            handler.handleMessage(mqttMessage);
+        }
+
+        /**
+         * 发送消息
+         *
+         * @param mqttMessage 消息
+         * @param channelName 发送到指定的通道
+         */
+        public static void sendMessage(Message<String> mqttMessage, String channelName) {
+            MqttPahoMessageHandler handler = getHandler(channelName);
+            handler.handleMessage(mqttMessage);
+        }
+
+        /**
+         * 如果只有一个通道将使用该通道发送消息
+         *
+         * @param topic
+         * @param message
+         * @param qos
+         */
+        public static void sendMessage(String topic, String message, int qos) {
+            MqttPahoMessageHandler handler = getDefaultHeadler();
+            Message<String> mqttMessage = MessageBuilder.withPayload(message).setHeader(MqttHeaders.TOPIC, topic)
+                    .setHeader(MqttHeaders.QOS, qos).build();
+            handler.handleMessage(mqttMessage);
+        }
+
+        /**
+         * 如果只有一个通道将使用该通道发送消息,默认qos级别为1
+         *
+         * @param topic
+         * @param message
+         */
+        public static void sendMessage(String topic, String message) {
+            MqttPahoMessageHandler handler = getDefaultHeadler();
+            Message<String> mqttMessage = MessageBuilder.withPayload(message).setHeader(MqttHeaders.TOPIC, topic)
+                    .setHeader(MqttHeaders.QOS, QOS_1).build();
+            handler.handleMessage(mqttMessage);
+        }
+
+        /**
+         * 如果只有一个通道将使用该通道发送消息,默认qos级别为1
+         *
+         * @param mqttMessage 消息信息
+         */
+        public static void sendMessage(Message<String> mqttMessage) {
+            MqttPahoMessageHandler handler = getDefaultHeadler();
+            handler.handleMessage(mqttMessage);
+        }
+
+        /**
+         * 获取默认的handler
+         *
+         * @return
+         */
+        private static MqttPahoMessageHandler getDefaultHeadler() {
+            Collection<MqttPahoMessageHandler> values = HANDLER_MAP.values();
+            Iterator<MqttPahoMessageHandler> iterator = values.iterator();
+            MqttPahoMessageHandler handler = iterator.next();
+            if (handler == null) {
+                log.error("发送消息失败,无可用的headler");
+                throw new RuntimeException("发送消息失败,无可用的headler");
+            }
+            return handler;
+        }
+
+        /**
+         * 根据通道获取handler
+         *
+         * @param channelName
+         * @return
+         */
+        private static MqttPahoMessageHandler getHandler(String channelName) {
+            MqttPahoMessageHandler handler = HANDLER_MAP.get(channelName + CHANNEL_NAME_SUFFIX);
+            if (handler == null) {
+                log.error("未查询到相应通道{}的handler,存在的通道名称{}", channelName, HANDLER_MAP.keySet());
+                throw new IllegalArgumentException("未查询到相应通道" + channelName + "的handler");
+            }
+            return handler;
+        }
+    }
 }

+ 11 - 0
src/main/java/com/usky/utils/ShiroUtils.java

@@ -1,6 +1,7 @@
 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;
@@ -32,6 +33,16 @@ public class ShiroUtils {
         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();

+ 3 - 0
src/main/java/com/usky/utils/SpringContextUtils.java

@@ -9,6 +9,9 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
 
+/**
+ * @author laowo
+ */
 @Component
 public class SpringContextUtils implements ApplicationContextAware {
 

+ 0 - 153
src/main/java/com/usky/utils/mqtt/MqttUtils.java

@@ -1,153 +0,0 @@
-package com.usky.utils.mqtt;
-
-import lombok.extern.log4j.Log4j2;
-import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
-import org.springframework.integration.mqtt.support.MqttHeaders;
-import org.springframework.integration.support.MessageBuilder;
-import org.springframework.messaging.Message;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * mqtt工具类,可以根据通道名称发送消息
- */
-@Log4j2
-public class MqttUtils {
-
-    /**
-     * qos 0
-     */
-    public static final int QOS_0 = 0;
-    /**
-     * qos 1
-     */
-    public static final int QOS_1 = 1;
-    /**
-     * qos 2
-     */
-    public static final int QOS_2 = 2;
-
-    private final static Map<String, MqttPahoMessageHandler> HANDLER_MAP = new HashMap<>(16);
-    public final static String CHANNEL_NAME_SUFFIX = "MqttPahoMessageHandler";
-
-    /**
-     * 存放handler
-     *
-     * @param channelName
-     * @param handler
-     */
-    public static void put(String channelName, MqttPahoMessageHandler handler) {
-        HANDLER_MAP.put(channelName + CHANNEL_NAME_SUFFIX, handler);
-    }
-
-    /**
-     * 发送消息
-     *
-     * @param topic       要发送的主题
-     * @param message     消息内容
-     * @param qos         qos级别
-     * @param channelName 发送到指定的通道
-     */
-    public static void sendMessage(String topic, String message, int qos, String channelName) {
-        MqttPahoMessageHandler handler = getHandler(channelName);
-        Message<String> mqttMessage = MessageBuilder.withPayload(message).setHeader(MqttHeaders.TOPIC, topic)
-                .setHeader(MqttHeaders.QOS, qos).build();
-        handler.handleMessage(mqttMessage);
-    }
-
-    /**
-     * 发送消息,默认qos级别为1
-     *
-     * @param topic       要发送的主题
-     * @param message     消息内容
-     * @param channelName 发送到指定的通道
-     */
-    public static void sendMessage(String topic, String message, String channelName) {
-        MqttPahoMessageHandler handler = getHandler(channelName);
-        Message<String> mqttMessage = MessageBuilder.withPayload(message).setHeader(MqttHeaders.TOPIC, topic)
-                .setHeader(MqttHeaders.QOS, QOS_1).build();
-        handler.handleMessage(mqttMessage);
-    }
-
-    /**
-     * 发送消息
-     *
-     * @param mqttMessage 消息
-     * @param channelName 发送到指定的通道
-     */
-    public static void sendMessage(Message<String> mqttMessage, String channelName) {
-        MqttPahoMessageHandler handler = getHandler(channelName);
-        handler.handleMessage(mqttMessage);
-    }
-
-    /**
-     * 如果只有一个通道将使用该通道发送消息
-     *
-     * @param topic
-     * @param message
-     * @param qos
-     */
-    public static void sendMessage(String topic, String message, int qos) {
-        MqttPahoMessageHandler handler = getDefaultHeadler();
-        Message<String> mqttMessage = MessageBuilder.withPayload(message).setHeader(MqttHeaders.TOPIC, topic)
-                .setHeader(MqttHeaders.QOS, qos).build();
-        handler.handleMessage(mqttMessage);
-    }
-
-    /**
-     * 如果只有一个通道将使用该通道发送消息,默认qos级别为1
-     *
-     * @param topic
-     * @param message
-     */
-    public static void sendMessage(String topic, String message) {
-        MqttPahoMessageHandler handler = getDefaultHeadler();
-        Message<String> mqttMessage = MessageBuilder.withPayload(message).setHeader(MqttHeaders.TOPIC, topic)
-                .setHeader(MqttHeaders.QOS, QOS_1).build();
-        handler.handleMessage(mqttMessage);
-    }
-
-    /**
-     * 如果只有一个通道将使用该通道发送消息,默认qos级别为1
-     *
-     * @param mqttMessage 消息信息
-     */
-    public static void sendMessage(Message<String> mqttMessage) {
-        MqttPahoMessageHandler handler = getDefaultHeadler();
-        handler.handleMessage(mqttMessage);
-    }
-
-    /**
-     * 获取默认的handler
-     *
-     * @return
-     */
-    private static MqttPahoMessageHandler getDefaultHeadler() {
-        Collection<MqttPahoMessageHandler> values = HANDLER_MAP.values();
-        Iterator<MqttPahoMessageHandler> iterator = values.iterator();
-        MqttPahoMessageHandler handler = iterator.next();
-        if (handler == null) {
-            log.error("发送消息失败,无可用的headler");
-            throw new RuntimeException("发送消息失败,无可用的headler");
-        }
-        return handler;
-    }
-
-    /**
-     * 根据通道获取handler
-     *
-     * @param channelName
-     * @return
-     */
-    private static MqttPahoMessageHandler getHandler(String channelName) {
-        MqttPahoMessageHandler handler = HANDLER_MAP.get(channelName + CHANNEL_NAME_SUFFIX);
-        if (handler == null) {
-            log.error("未查询到相应通道{}的handler,存在的通道名称{}", channelName, HANDLER_MAP.keySet());
-            throw new IllegalArgumentException("未查询到相应通道" + channelName + "的handler");
-        }
-        return handler;
-    }
-}