Преглед на файлове

调整全局异常捕获

laowo преди 3 години
родител
ревизия
f3e631640a

+ 15 - 1
pom.xml

@@ -15,6 +15,20 @@
         <version>2.1.5.RELEASE</version>
     </parent>
     <dependencies>
+
+        <!--jsr 303-->
+<!--        <dependency>-->
+<!--            <groupId>javax.validation</groupId>-->
+<!--            <artifactId>validation-api</artifactId>-->
+<!--            <version>1.1.0.Final</version>-->
+<!--        </dependency>-->
+<!--        &lt;!&ndash; hibernate validator&ndash;&gt;-->
+<!--        <dependency>-->
+<!--            <groupId>org.hibernate</groupId>-->
+<!--            <artifactId>hibernate-validator</artifactId>-->
+<!--            <version>5.2.0.Final</version>-->
+<!--        </dependency>-->
+
         <!--spring配置-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -98,7 +112,6 @@
                 </exclusion>
             </exclusions>
         </dependency>
-
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
@@ -108,6 +121,7 @@
             <artifactId>artemis-http-client</artifactId>
             <version>1.1.3</version>
         </dependency>
+
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>

+ 8 - 10
src/main/java/com/usky/config/shiro/UserRealm.java

@@ -6,8 +6,10 @@ import com.usky.entity.sys.vo.SysUserVO;
 import com.usky.service.sys.menuService.MenuService;
 import com.usky.service.sys.user.LoginService;
 import com.usky.service.sys.user.UserService;
+import com.usky.utils.AuthorizationUtils;
 import com.usky.utils.RedisUtil;
 
+import com.usky.utils.ShiroUtils;
 import com.usky.utils.jwt.JwtUtil;
 import com.usky.utils.jwt.common.StringUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -55,7 +57,7 @@ public class UserRealm extends AuthorizingRealm {
         SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
         String loginName = JwtUtil.getClaim(principalCollection.toString(), Constant.ACCOUNT);
         if (StringUtil.isBlank(loginName)) {
-            throw new AuthenticationException("Token中帐号为空(The account in Token is empty.)");
+            throw new AuthenticationException("Token中帐号为空");
         }
         SysUserVO sysUser = userService.queryuserByLoginName(loginName);
         if (sysUser != null) {
@@ -89,12 +91,12 @@ public class UserRealm extends AuthorizingRealm {
         String loginName = JwtUtil.getClaim(token, "loginName");
         // 帐号为空
         if (StringUtil.isBlank(loginName)) {
-            throw new AuthenticationException("Token中帐号为空(The account in Token is empty.)");
+            throw new AuthenticationException("Token中帐号为空");
         }
         // 查询用户是否存在
         SysUserVO sysUser = userService.queryuserByLoginName(loginName);
         if (sysUser == null) {
-            throw new AuthenticationException("该帐号不存在(The account does not exist.)");
+            throw new AuthenticationException("该帐号不存在");
         }
         // 开始认证,要AccessToken认证通过,且Redis中存在RefreshToken,且两个Token时间戳一致
         if (JwtUtil.verify(token) && redisUtil.hasKey(Constant.PREFIX_SHIRO_REFRESH_TOKEN + loginName)) {
@@ -105,7 +107,7 @@ public class UserRealm extends AuthorizingRealm {
                 return new SimpleAuthenticationInfo(token, token, "userRealm");
             }
         }
-        throw new AuthenticationException("Token已过期(Token expired or incorrect.)");
+        throw new AuthenticationException("Token已过期");
     }
     /**
      * 清除当前用户的权限认证缓存
@@ -120,12 +122,8 @@ public class UserRealm extends AuthorizingRealm {
      * 清理所有用户授权信息缓存
      */
     public void clearAllCachedAuthorizationInfo() {
-        Cache<Object, AuthorizationInfo> cache = getAuthorizationCache();
-        if (cache != null) {
-            for (Object key : cache.keys()) {
-                cache.remove(key);
-            }
-        }
+        AuthorizationUtils.clearAllCachedAuthorizationInfo();
+
     }
 
 }

+ 1 - 1
src/main/java/com/usky/config/shiro/jwt/JwtFilter.java

@@ -180,7 +180,7 @@ public class JwtFilter extends BasicHttpAuthenticationFilter {
         httpServletResponse.setCharacterEncoding("UTF-8");
         httpServletResponse.setContentType("application/json; charset=utf-8");
         try (PrintWriter out = httpServletResponse.getWriter()) {
-            String data = JsonConvertUtil.objectToJson(new ResponseBean(HttpStatus.UNAUTHORIZED.value(), "无权访问(Unauthorized):" + msg, null));
+            String data = JsonConvertUtil.objectToJson(new ResponseBean(HttpStatus.UNAUTHORIZED.value(), "无权访问:" + msg, null));
             out.append(data);
         } catch (IOException e) {
             logger.error("直接返回Response信息出现IOException异常:{}", e.getMessage());

+ 28 - 19
src/main/java/com/usky/controller/login/LoginController.java

@@ -1,33 +1,31 @@
 package com.usky.controller.login;
 
 import com.usky.constant.Constant;
+import com.usky.entity.ResponseBean;
+import com.usky.entity.sys.log.SysLogDTO;
 import com.usky.entity.sys.vo.SysUserVO;
+import com.usky.exception.CustomException;
 import com.usky.exception.CustomUnauthorizedException;
+import com.usky.service.log.LogService;
 import com.usky.service.sys.user.LoginService;
-import com.usky.service.sys.user.UserService;
-import com.usky.utils.AuthorizationUtils;
-import com.usky.utils.RedisUtil;
-import com.usky.utils.Result;
+import com.usky.utils.*;
 import com.usky.utils.jwt.AesCipherUtil;
 import com.usky.utils.jwt.JwtUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.AuthenticationException;
-import org.apache.shiro.authc.AuthenticationToken;
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.apache.shiro.subject.Subject;
+import org.apache.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.PropertySource;
 import org.springframework.http.HttpStatus;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.sql.Timestamp;
 
 /**
  * @author laowo
@@ -37,18 +35,22 @@ import javax.servlet.http.HttpServletResponse;
  **/
 @RestController
 @RequestMapping("sys")
-@Api(tags = "登录")
+@Api(tags = "登录-退出")
 @PropertySource("classpath:config.properties")
 public class LoginController {
     @Autowired
     private LoginService loginService;
     @Autowired
     private RedisUtil redisUtil;
+    @Autowired
+    private LogService logService;
     /**
      * RefreshToken过期时间
      */
     @Value("${refreshTokenExpireTime}")
     private String refreshTokenExpireTime;
+
+    @ApiOperation(value = "登录")
     @PostMapping("login")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "loginName", value = "登录名", required = true, paramType = "query"),
@@ -57,7 +59,6 @@ public class LoginController {
     public Result<?> login(@RequestParam("loginName") String loginName,
                            @RequestParam("passWord") String passWord, HttpServletResponse httpServletResponse) {
         SysUserVO user = loginService.findUserByUsername(loginName);
-
         if (user.getStatus().equals("1")) {
             return Result.error("账户已停用,请联系管理员!");
         }
@@ -74,21 +75,29 @@ public class LoginController {
             String token = JwtUtil.sign(loginName, currentTimeMillis);
             httpServletResponse.setHeader("Authorization", token);
             httpServletResponse.setHeader("Access-Control-Expose-Headers", "Authorization");
+            SysLogDTO log = new SysLogDTO();
+            log.setLogType(1);
+            //获取request
+            HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
+            //请求的参数
+            log.setRequestType(request.getMethod());
+            //设置IP地址
+            log.setIp(IPUtils.getIpAddr(request));
+            //获取登录用户信息 TODO 添加用户数据后启用
+            log.setUsername(loginName);
+            log.setCreateTime(new Timestamp(System.currentTimeMillis()));
+            logService.addLog(log);
             return Result.OK("登录成功");
         } else {
             throw new CustomUnauthorizedException("帐号或密码错误(Account or Password Error.)");
         }
     }
 
-
-
-
     @PostMapping("loginOut")
     @ApiOperation(value = "用户退出")
     public Result<?> loginOut() {
-        AuthorizationUtils.clearAllCachedAuthorizationInfo();
-        return Result.error("操作成功");
+        ShiroUtils.logout();
+        return Result.OK("退出成功");
     }
 
-
 }

+ 73 - 24
src/main/java/com/usky/controller/sys/UserController.java

@@ -1,6 +1,7 @@
 package com.usky.controller.sys;
 
 import com.usky.constant.Constant;
+import com.usky.entity.ResponseBean;
 import com.usky.entity.sys.SysUserDTO;
 import com.usky.entity.sys.vo.SysUserVO;
 import com.usky.exception.CustomException;
@@ -13,11 +14,20 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.annotation.Logical;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author laowo
@@ -33,6 +43,8 @@ public class UserController {
     private UserService userService;
     @Autowired
     private RoleService roleService;
+    @Autowired
+    private RedisUtil redisUtil;
 
     private String prefix = "sys/user";
 
@@ -55,39 +67,41 @@ public class UserController {
             @ApiImplicitParam(name = "userName", value = "用户名", required = true, paramType = "query"),
             @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query"),
     })
+//    @PostMapping("addUser")
+//    public Result<?> addUser(
+//            @RequestParam(value = "loginName", required = true) String loginName,
+//            @RequestParam(value = "status", defaultValue = "0") String status,
+//            @RequestParam(value = "phonenumber", required = true) String phonenumber,
+//            @RequestParam(value = "deptId", required = true) Integer deptId,
+//            @RequestParam(value = "password", required = true) String password,
+//            @RequestParam(value = "userName", required = true) String userName,
+//            @RequestParam(value = "roleIds", required = true) String roleIds,
+//            @RequestParam(value = "remark", required = false) String remark
+//    ) {
     @PostMapping("addUser")
-    public Result<?> addUser(
-            @RequestParam(value = "loginName", required = true) String loginName,
-            @RequestParam(value = "status", required = false) String status,
-            @RequestParam(value = "phonenumber", required = true) String phonenumber,
-            @RequestParam(value = "deptId", required = true) Integer deptId,
-            @RequestParam(value = "password", required = true) String password,
-            @RequestParam(value = "userName", required = true) String userName,
-            @RequestParam(value = "roleIds", required = true) String roleIds,
-            @RequestParam(value = "remark", required = false) String remark
-    ) {
+    public Result<?> addUser(@Validated SysUserVO userVO) {
         //登录名校验
-        List<SysUserVO> sysUserVOList = userService.listAll(new SysUserVO(), null, loginName, null, null, null, null);
+        List<SysUserVO> sysUserVOList = userService.listAll(new SysUserVO(), null, userVO.getLoginName(), null, null, null, null);
         if (ListUtil.isNotBlank(sysUserVOList)) {
             return Result.error("登录名已存在");
         }
-        List<SysUserVO> phone = userService.listAll(new SysUserVO(), null, null, phonenumber, null, null, null);
+        List<SysUserVO> phone = userService.listAll(new SysUserVO(), null, null, userVO.getPhonenumber(), null, null, null);
         if (ListUtil.isNotBlank(phone)) {
             return Result.error("手机号已存在");
         }
-        if (password.length() > Constant.PASSWORD_MAX_LEN) {
+        if (userVO.getPassword().length() > Constant.PASSWORD_MAX_LEN) {
             throw new CustomException("密码最多8位");
         }
-        String key = AesCipherUtil.enCrypto(loginName + password);
-        SysUserVO user = new SysUserVO();
-        user.setLoginName(loginName);
-        user.setDeptId(deptId);
-        user.setRemark(remark);
-        user.setUserName(userName);
-        user.setPassword(key);
-        user.setStatus(status);
-        user.setRoleIds(roleIds);
-        userService.addUser(user);
+        String key = AesCipherUtil.enCrypto(userVO.getLoginName() + userVO.getPassword());
+//        SysUserVO user = new SysUserVO();
+//        user.setLoginName(loginName);
+//        user.setDeptId(deptId);
+//        user.setRemark(remark);
+//        user.setUserName(userName);
+//        user.setPassword(key);
+//        user.setStatus(status);
+//        user.setRoleIds(roleIds);
+        userService.addUser(userVO);
         return Result.OK();
     }
 
@@ -118,6 +132,7 @@ public class UserController {
         SysUserVO sysUserVO = new SysUserVO();
         return userService.list(sysUserVO, status, loginName, phonenumber, startTime, endTime, deptId, pageSize, pageNo);
     }
+
     @ApiOperation(value = "用户查询-全部 -可用于导出")
     @PostMapping("listAll")
     @ApiImplicitParams({
@@ -141,6 +156,7 @@ public class UserController {
         List<SysUserVO> sysUserVOList = userService.listAll(new SysUserVO(), status, loginName, phonenumber, startTime, endTime, deptId);
         return Result.OK(sysUserVOList);
     }
+
     @ApiOperation(value = "修改用户")
     @RequiresPermissions("system:user:edit")
     @PostMapping("/edit")
@@ -203,6 +219,39 @@ public class UserController {
         userService.reSetPW(user);
         return Result.OK();
     }
-
+    @ApiOperation(value = "在线用户查看")
+    @GetMapping("/online")
+    @RequiresPermissions("online:user:view")
+    public Result<?> online() {
+        List<Object> userDtos = new ArrayList<Object>();
+        // 查询所有Redis键
+        Set<String> keys = redisUtil.keys(Constant.PREFIX_SHIRO_REFRESH_TOKEN);
+        for (String key : keys) {
+            if (redisUtil.hasKey(key)) {
+                // 根据:分割key,获取最后一个字符(帐号)
+                String[] strArray = key.split(":");
+                SysUserVO userDto = new SysUserVO();
+                String loginName = strArray[strArray.length - 1];
+                userDto = userService.queryuserByLoginName(loginName);
+                // 设置登录时间
+                userDto.setLoginDate(new Timestamp(Long.parseLong(redisUtil.get(key).toString())));
+                userDtos.add(userDto);
+            }
+        }
+        return Result.OK(userDtos);
+    }
+    /**
+     * 剔除在线用户
+     */
+    @DeleteMapping("/online/{id}")
+    @RequiresPermissions("online:user:view")
+    public Result<?> deleteOnline(@PathVariable("id") Integer id) {
+        SysUserDTO user = userService.queryUserById(id);
+        if (redisUtil.hasKey(Constant.PREFIX_SHIRO_REFRESH_TOKEN + user.getLoginName())) {
+            redisUtil.del(Constant.PREFIX_SHIRO_REFRESH_TOKEN + user.getLoginName());
+            return Result.OK();
+        }
+        throw new CustomException("剔除失败,LoginName不存在");
+    }
 
 }

+ 0 - 163
src/main/java/com/usky/controller/top/TopController.java

@@ -1,163 +0,0 @@
-package com.usky.controller.top;
-
-import com.alibaba.fastjson.JSONObject;
-import com.usky.annotion.AutoLog;
-import com.usky.constant.CommonConstant;
-import com.usky.entity.mqtt.TbDeviceInfoDTO;
-import com.usky.entity.mqtt.vo.TbDeviceAlarmsVO;
-import com.usky.entity.mqtt.vo.TbDeviceInfoVO;
-import com.usky.entity.mqtt.vo.TbDeviceVO;
-import com.usky.entity.mqtt.vo.TbDeviceVOTop;
-import com.usky.service.top.TopServcie;
-import com.usky.utils.HttpUtils;
-import com.usky.utils.Page;
-import com.usky.utils.RedisUtil;
-import com.usky.utils.Result;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.util.EntityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author laowo
- * @version v1.0
- * @date 2021/8/10 17:25
- * @description TODO
- **/
-@RestController
-@RequestMapping("jx/top")
-@Api(tags = "首页")
-public class TopController {
-    @Autowired
-    private TopServcie topServcie;
-    @Autowired
-    private RedisUtil redisUtil;
-
-    @GetMapping("listDeviceStatus")
-    @ApiOperation(value = "首页-设备状态统计")
-    @ApiImplicitParams({
-    })
-    public Result<?> listDeviceStatus() {
-        Map<String, Object> result = topServcie.listDeviceStatus();
-        return Result.OK(result);
-    }
-
-    @GetMapping("listAlarmsSe")
-    @ApiOperation(value = "首页-七日告警统计")
-    @ApiImplicitParams({
-    })
-    public Result<?> listAlarmsSe() {
-        List<Object> result = topServcie.listAlarmsSe();
-        return Result.OK(result);
-    }
-
-
-    @GetMapping("listDevcie")
-    @ApiOperation(value = "首页-首页设备查询")
-    @ApiImplicitParams({
-    })
-
-    public Result<?> listDevcie() {
-
-        List<TbDeviceVOTop> result = topServcie.listDevcie();
-        return Result.OK(result);
-    }
-
-
-    @ApiOperation(value = "首页天气查询")
-    @GetMapping("listWeather")
-    @AutoLog(value = "首页天气查询")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "area", value = "地区", required = true, paramType = "query")
-    })
-    public Result<Object> listWeather(@RequestParam(name = "area", required = false) String area) {
-        JSONObject jsonObject = null;
-        if (redisUtil.hasKey(area)) {
-            return Result.OK(redisUtil.get(area));
-        }
-        Map<String, String> headers = new HashMap<String, String>();
-        headers.put("Authorization", "APPCODE " + CommonConstant.TOP_WEATHER_APPCODE);
-        Map<String, String> querys = new HashMap<String, String>();
-        querys.put("area", area);
-        try {
-            HttpResponse response = HttpUtils.doGet(CommonConstant.TOP_WEATHER_HOST, CommonConstant.TOP_WEATHER_PATH, CommonConstant.TOP_WEATHER_METHOD, headers, querys);
-            HttpEntity entity = response.getEntity();
-            if (null != entity) {
-                String s = EntityUtils.toString(response.getEntity());
-                jsonObject = JSONObject.parseObject(s);
-                redisUtil.set(area, jsonObject, 60 * 60 * 6);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return Result.OK(jsonObject);
-    }
-
-
-    @ApiOperation(value = "首页-液位查询")
-    @GetMapping("listYw")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "devId", value = "设备id", required = false, paramType = "query")
-    })
-    public Result<Object> listYw(@RequestParam(name = "devId", required = false, defaultValue = "861050040560321") String devId) {
-        List<TbDeviceInfoDTO> tbDeviceInfoDTOS = topServcie.listYw(devId);
-        return Result.OK(tbDeviceInfoDTOS);
-    }
-
-
-    @ApiOperation(value = "首页-历史告警查询")
-    @GetMapping("listHistryAlarms")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "devId", value = "设备id", required = false, paramType = "query"),
-            @ApiImplicitParam(name = "pageNo", value = "当前页 默认1", required = false, paramType = "query"),
-            @ApiImplicitParam(name = "status", value = "告警状态", required = false, paramType = "query"),
-            @ApiImplicitParam(name = "serial", value = "告警类型", required = false, paramType = "query"),
-            @ApiImplicitParam(name = "pageSize", value = "页数据条数20", required = false, paramType = "query")
-    })
-    public Page<TbDeviceAlarmsVO> listHistryAlarms(
-            @RequestParam(name = "pageSize", defaultValue = "20") Integer pageSize,
-            @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
-            @RequestParam(name = "status", required = false) String status,
-            @RequestParam(name = "serial", required = false) String serial,
-            @RequestParam(name = "devId", required = false) String devId
-    ) {
-        Page<TbDeviceAlarmsVO> result = topServcie.listHistryAlarms(devId, pageSize, pageNo, status, serial);
-        return result;
-    }
-
-
-    @ApiOperation(value = "历史告警统计")
-    @GetMapping("listHistryAlarmsTj")
-    @ApiImplicitParams({
-
-    })
-    public Result<?> listHistryAlarmsTj(
-
-    ) {
-        Map result = topServcie.listHistryAlarmsTj();
-        return Result.OK(result);
-    }
-
-
-    @ApiOperation(value = "告警处理")
-    @PostMapping("updateAlarm")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "Id", value = "告警编号", required = true, paramType = "query")
-    })
-    public Result<?> updateAlarm(   @RequestParam(name = "Id") Integer Id
-    ) {
-
-        return topServcie.updateAlarm(Id);
-    }
-
-
-}

+ 2 - 1
src/main/java/com/usky/entity/sys/vo/SysMenuVO.java

@@ -4,8 +4,9 @@ import com.usky.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.hibernate.validator.constraints.NotBlank;
+
 
-import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 import java.io.Serializable;

+ 1 - 2
src/main/java/com/usky/entity/sys/vo/SysRoleVO.java

@@ -4,10 +4,9 @@ import com.usky.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.hibernate.validator.constraints.NotBlank;
 
 import javax.persistence.*;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 import java.io.Serializable;
 import java.sql.Timestamp;

+ 2 - 1
src/main/java/com/usky/entity/sys/vo/SysUserVO.java

@@ -5,8 +5,9 @@ import com.usky.entity.sys.SysRoleDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.hibernate.validator.constraints.NotBlank;
+
 
-import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.Size;
 import java.io.Serializable;
 import java.sql.Timestamp;

+ 128 - 20
src/main/java/com/usky/exception/GloableExceptionResolver.java

@@ -1,21 +1,37 @@
 package com.usky.exception;
 
+import com.usky.entity.ResponseBean;
 import com.usky.utils.Result;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.ShiroException;
 import org.apache.shiro.UnavailableSecurityManagerException;
+import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.authc.IncorrectCredentialsException;
 import org.apache.shiro.authc.LockedAccountException;
 import org.apache.shiro.authc.UnknownAccountException;
 import org.apache.shiro.authz.AuthorizationException;
+import org.apache.shiro.authz.UnauthenticatedException;
 import org.apache.shiro.authz.UnauthorizedException;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.data.redis.connection.PoolException;
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.BindException;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.ObjectError;
 import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 import org.springframework.web.servlet.NoHandlerFoundException;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.ValidationException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author laowo
  * @version v1.0
@@ -25,11 +41,10 @@ import org.springframework.web.servlet.NoHandlerFoundException;
 @RestControllerAdvice
 @Slf4j
 public class GloableExceptionResolver {
-
     @ExceptionHandler(Exception.class)
     public Result<?> handleException(Exception e) {
         log.error(e.getMessage(), e);
-        return Result.error("操作失败," + e.getMessage());
+        return Result.error("系统异常,请稍后重试," + e.getMessage());
     }
 
     @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
@@ -37,37 +52,130 @@ public class GloableExceptionResolver {
         log.error(e.getMessage(), e);
         return Result.error("请求方式异常," + e.getMessage());
     }
-
     @ExceptionHandler(DataIntegrityViolationException.class)
     public Result<?> handleDataIntegrityViolationException(DataIntegrityViolationException e) {
         log.error(e.getMessage(), e);
         return Result.error("字段太长,超出数据库字段的长度");
     }
-
     @ExceptionHandler(PoolException.class)
     public Result<?> handlePoolException(PoolException e) {
         log.error(e.getMessage(), e);
         return Result.error("Redis 连接异常!");
     }
+    @ExceptionHandler
+    public Result<?> methodArgumentNotValid(BindException e) {
+        if (log.isDebugEnabled()) {
+            log.debug("参数校验失败", e);
+        }
+        List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
+        StringBuilder errorMessage = new StringBuilder();
+        for (int i = 0; i < allErrors.size(); i++) {
+            ObjectError error = allErrors.get(i);
+            errorMessage.append(error.getDefaultMessage());
+            if (i != allErrors.size() - 1) {
+                errorMessage.append(",");
+            }
+        }
+        return Result.error(errorMessage.toString());
+    }
+//
+//    @ExceptionHandler(ShiroException.class)
+//    public Result<?> doHandleShiroException(
+//            ShiroException e) {
+//        if (e instanceof UnknownAccountException) {
+//            return Result.error("账户不存在");
+//        } else if (e instanceof LockedAccountException) {
+//            return Result.error("账户被禁用");
+//        } else if (e instanceof IncorrectCredentialsException) {
+//            return Result.error("密码不正确");
+//        } else if (e instanceof AuthorizationException) {
+//            return Result.error("没有此操作权限");
+//        } else if (e instanceof UnavailableSecurityManagerException) {
+//            return Result.error("用户未登录!");
+//        } else if (e instanceof AuthenticationException) {
+//            return Result.error(e.getMessage());
+//        }
+//        System.out.println("e = " + e.getMessage());
+//        return Result.error("系统维护中");
+//
+//    }
+//
+    /**
+     * 捕捉所有Shiro异常
+     *
+     * @param e
+     * @return
+     */
+    @ResponseStatus(HttpStatus.UNAUTHORIZED)
+    @ExceptionHandler(ShiroException.class)
+    public Result<?> handle401(ShiroException e) {
+        return Result.error(HttpStatus.UNAUTHORIZED.value(), "无权访问:" + e.getMessage());
+    }
 
+    /**
+     * 单独捕捉Shiro(UnauthorizedException)异常
+     * 该异常为访问有权限管控的请求而该用户没有所需权限所抛出的异常
+     * @param e
+     * @return
+     */
+    @ResponseStatus(HttpStatus.UNAUTHORIZED)
+    @ExceptionHandler(UnauthorizedException.class)
+    public Result<?> handle401(UnauthorizedException e) {
+        return Result.error(HttpStatus.UNAUTHORIZED.value(), "无权访问:当前用户没有此请求所需权限(" + e.getMessage() + ")");
+    }
 
-    @ExceptionHandler(ShiroException.class)
-    public Result<?> doHandleShiroException(
-            ShiroException e) {
-        if (e instanceof UnknownAccountException) {
-            return Result.error("账户不存在");
-        } else if (e instanceof LockedAccountException) {
-            return Result.error("账户被禁用");
-        } else if (e instanceof IncorrectCredentialsException) {
-            return Result.error("密码不正确");
-        } else if (e instanceof AuthorizationException) {
-            return Result.error("没有此操作权限");
-        } else if (e instanceof UnavailableSecurityManagerException) {
-            return Result.error("用户未登录!");
-        }
-        System.out.println("e = " + e.getMessage());
-        return Result.error("系统维护中");
+    /**
+     * 单独捕捉Shiro(UnauthenticatedException)异常
+     * 该异常为以游客身份访问有权限管控的请求无法对匿名主体进行授权,而授权失败所抛出的异常
+     * @param e
+     * @return
+     */
+    @ResponseStatus(HttpStatus.UNAUTHORIZED)
+    @ExceptionHandler(UnauthenticatedException.class)
+    public Result<?> handle401(UnauthenticatedException e) {
+        return Result.error(HttpStatus.UNAUTHORIZED.value(), "无权访问:请先登录");
+    }
 
+    /**
+     * 捕捉UnauthorizedException自定义异常
+     * @return
+     */
+    @ResponseStatus(HttpStatus.UNAUTHORIZED)
+    @ExceptionHandler(CustomUnauthorizedException.class)
+    public Result<?> handle401(CustomUnauthorizedException e) {
+        return Result.error(HttpStatus.UNAUTHORIZED.value(), "无权访问:" + e.getMessage());
+    }
+
+    /**
+     * 捕捉其他所有自定义异常
+     * @return
+     */
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
+    @ExceptionHandler(CustomException.class)
+    public Result<?> handle(CustomException e) {
+        return Result.error(HttpStatus.BAD_REQUEST.value(), e.getMessage());
+    }
+    /**
+     * 捕捉404异常
+     * @return
+     */
+    @ResponseStatus(HttpStatus.NOT_FOUND)
+    @ExceptionHandler(NoHandlerFoundException.class)
+    public Result<?> handle(NoHandlerFoundException e) {
+        return Result.error(HttpStatus.NOT_FOUND.value(), e.getMessage());
+    }
+    /**
+     * 获取状态码
+     *
+     * @param request
+     * @return
+     */
+    private HttpStatus getStatus(HttpServletRequest request) {
+        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
+        if (statusCode == null) {
+            return HttpStatus.INTERNAL_SERVER_ERROR;
+        }
+        return HttpStatus.valueOf(statusCode);
     }
 
 

+ 1 - 1
src/main/java/com/usky/service/sys/user/LoginServiceImpl.java

@@ -27,7 +27,7 @@ public class LoginServiceImpl extends BaseDaoImpl implements LoginService {
 
         List<SysUserDTO> list = getSession().createQuery("from SysUserDTO where loginName ='" + username + "'").list();
         if (ListUtil.isBlank(list)) {
-            throw new AuthenticationException("登录!");
+            throw new AuthenticationException("登录名或密码错误!");
         }
         List<SysRoleDTO> sysRoleDTOS = queryRoleByLoginName(username);
         List<SysUserVO> sysUserVOS = BeanHelp.copyWithCollection(list, SysUserVO.class);

+ 1 - 1
src/main/java/com/usky/service/sys/user/UserServiceImpl.java

@@ -38,7 +38,7 @@ public class UserServiceImpl extends BaseDaoImpl implements UserService {
 //        sysUserDTO.setSalt(salt);
 //        //    Md5Hash md5Hash = new Md5Hash(password, salt); //模拟md5加密一次
 //        sysUserDTO.setPassword(passwordEncode);
-        sysUserDTO.setStatus("0");
+
         //用户类型
         sysUserDTO.setUserType("01");
         sysUserDTO.setDelFlag("0");

+ 0 - 73
src/main/java/com/usky/service/top/TopServcie.java

@@ -1,73 +0,0 @@
-package com.usky.service.top;
-
-import com.usky.entity.mqtt.TbDeviceInfoDTO;
-import com.usky.entity.mqtt.vo.TbDeviceAlarmsVO;
-import com.usky.entity.mqtt.vo.TbDeviceInfoVO;
-import com.usky.entity.mqtt.vo.TbDeviceVO;
-import com.usky.entity.mqtt.vo.TbDeviceVOTop;
-import com.usky.utils.Page;
-import com.usky.utils.Result;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author laowo
- */
-public interface TopServcie {
-    /**
-     * 首页设备状态统计
-     *
-     * @return
-     */
-    Map<String, Object> listDeviceStatus();
-
-    /**
-     * 首页七天告警统计
-     *
-     * @return
-     */
-    List<Object> listAlarmsSe();
-
-    /**
-     * 首页设备查询
-     *
-     * @return
-     */
-    List<TbDeviceVOTop> listDevcie();
-
-    /**
-     * 设备液位查询
-     *
-     * @param devId
-     * @return
-     */
-    List<TbDeviceInfoDTO> listYw(String devId);
-
-    /**
-     * 历史告警查询
-     *
-     * @param devId
-     * @param pageSize
-     * @param pageNo
-     * @param s
-     * @param status
-     * @return
-     */
-    Page<TbDeviceAlarmsVO> listHistryAlarms(String devId, Integer pageSize, Integer pageNo, String status, String serial);
-
-    /**
-     * 告警历史统计
-     *
-     * @return
-     */
-    Map<String, Object> listHistryAlarmsTj();
-
-    /**
-     * 告警处理
-     *
-     * @param id
-     * @return
-     */
-    Result<?> updateAlarm(Integer id);
-}

+ 0 - 190
src/main/java/com/usky/service/top/TopServcieImpl.java

@@ -1,190 +0,0 @@
-package com.usky.service.top;
-
-import com.usky.dao.impl.BaseDaoImpl;
-import com.usky.entity.mqtt.TbDeviceAlarmsDTO;
-import com.usky.entity.mqtt.TbDeviceDTO;
-import com.usky.entity.mqtt.TbDeviceInfoDTO;
-import com.usky.entity.mqtt.vo.TbDeviceAlarmsVO;
-import com.usky.entity.mqtt.vo.TbDeviceVOTop;
-import com.usky.utils.*;
-import net.sf.json.JSONObject;
-import org.apache.commons.lang3.StringUtils;
-import org.hibernate.query.Query;
-import org.hibernate.transform.Transformers;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * @author laowo
- * @version v1.0
- * @date 2021/8/10 17:34
- * @description TODO
- **/
-@Service
-public class TopServcieImpl extends BaseDaoImpl implements TopServcie {
-    @Autowired
-    private RedisUtil redisUtil;
-
-    @Override
-    public Map<String, Object> listDeviceStatus() {
-        List<TbDeviceDTO> list = getSession().createQuery("from TbDeviceDTO where del=0").list();
-        //所有告警
-        List<TbDeviceAlarmsDTO> alarmsDTOList = getSession().createQuery("from TbDeviceAlarmsDTO t where t.status=0").list();
-        //离线数量
-        long unOline = alarmsDTOList.stream().filter(s -> "1".equals(s.getSerial())).count();
-        //故障数量
-        long malfunction = alarmsDTOList.stream().filter(s -> !"1".equals(s.getSerial())).collect(Collectors.groupingBy(TbDeviceAlarmsDTO::getDevId)).size();
-        Map<String, Object> result = new HashMap<>();
-        //设备总数
-        result.put("deviceTotalNum", list.size());
-        result.put("unOline", unOline);
-        result.put("malfunction", malfunction);
-        return result;
-    }
-
-    @Override
-    public List<Object> listAlarmsSe() {
-        //查询七天告警数据
-        List<TbDeviceAlarmsDTO> list = getSession().createSQLQuery("SELECT id,dev_id as devId,register_id AS registerId,device_name AS deviceName,device_type AS deviceType,devcie_model AS devcieModel,property,serial,`value`,`status`,create_time AS createTime ,time_stamp AS `timeStamp` FROM tb_device_alarms WHERE date_sub(curdate(), interval 7 day) < date(create_time) order by id ASC")
-                .setResultTransformer(Transformers.aliasToBean(TbDeviceAlarmsDTO.class)).list();
-
-        List<TbDeviceAlarmsDTO> objects = new ArrayList<>();
-        for (TbDeviceAlarmsDTO deviceAlarmsDTO : list) {
-            String createTime = deviceAlarmsDTO.getCreateTime();
-            String time = createTime.substring(0, createTime.indexOf(" "));
-            deviceAlarmsDTO.setCreateTime(time);
-            objects.add(deviceAlarmsDTO);
-
-        }
-
-        Map<String, List<TbDeviceAlarmsDTO>> collect = objects.stream().collect(Collectors.groupingBy(TbDeviceAlarmsDTO::getCreateTime, LinkedHashMap::new, Collectors.toList()));
-
-
-        List<Object> resultList = new ArrayList<>();
-        Set<String> strings = collect.keySet();
-        for (String string : strings) {
-            Map<String, Object> map = new HashMap<>();
-            List<TbDeviceAlarmsDTO> alarmsDTOList = collect.get(string);
-            //离线数量
-            long count = alarmsDTOList.stream().filter(s -> "1".equals(s.getSerial())).count();
-            map.put("time", string);
-            map.put("offline", count);
-            map.put("total", alarmsDTOList.size());
-            resultList.add(map);
-        }
-        //  List<TbDeviceAlarmsVO> tbDeviceAlarmsVOS = BeanHelp.copyWithCollection(list, TbDeviceAlarmsVO.class);
-        return resultList;
-    }
-
-    @Override
-    public List<TbDeviceVOTop> listDevcie() {
-
-
-        List<TbDeviceDTO> list = getSession().createQuery("from TbDeviceDTO t where t.del=0").list();
-        List<TbDeviceVOTop> tbDeviceVOS = BeanHelp.copyWithCollection(list, TbDeviceVOTop.class);
-        for (TbDeviceVOTop tbDeviceVOTop : tbDeviceVOS) {
-            Object o = redisUtil.get(tbDeviceVOTop.getDevId());
-            JSONObject jsonObject = JSONObject.fromObject(o);
-            tbDeviceVOTop.setData(jsonObject);
-            tbDeviceVOTop.setUserName("吉超薄");
-            tbDeviceVOTop.setPhone("15365185591");
-        }
-        return tbDeviceVOS;
-    }
-
-    @Override
-    public List<TbDeviceInfoDTO> listYw(String devId) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("SELECT\n" +
-                "\tid,\n" +
-                "\tdev_id AS devId,\n" +
-                "\tdevice_name AS deviceName,\n" +
-                "\tproperty,\n" +
-                "\tserial,\n" +
-                "\t`value`,\n" +
-                "\ttime_stamp AS `timeStamp`,\n" +
-                "\t create_time AS createTime,\n" +
-                "\t\tdevce_type AS devceType,\n" +
-                "\tdevcie_model AS devcieModel \n" +
-                "FROM\n" +
-                "\ttb_device_info t \n" +
-                "WHERE\n" +
-                "\tt.serial = '67' \n" +
-                "\tAND date_sub( curdate(), INTERVAL 7 DAY ) < date( create_time ) ");
-
-        sb.append(" AND  dev_id='" + devId + "' GROUP BY date( create_time )");
-//
-        List<TbDeviceInfoDTO> list = getSession().createSQLQuery(sb.toString()).setResultTransformer(Transformers.aliasToBean(TbDeviceInfoDTO.class)).list();
-        return list;
-    }
-
-    @Override
-    public Page<TbDeviceAlarmsVO> listHistryAlarms(String devId, Integer pageSize, Integer pageNo, String status, String serial) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("from TbDeviceAlarmsDTO t where 1 =1 ");
-        if (StringUtils.isNotBlank(devId)) {
-            sb.append(" and t.devId= '" + devId + "' ");
-        }
-        if (StringUtils.isNotBlank(status)) {
-            sb.append(" and t.status= " + status + " ");
-        }
-        if (StringUtils.isNotBlank(serial)) {
-            sb.append(" and t.serial= '" + serial + "' ");
-        }
-        Query query = getSession().createQuery(sb.toString());
-
-
-        Page<TbDeviceAlarmsVO> result = new Page<>(query.list().size(), pageSize);
-        query.setFirstResult((pageNo - 1) * pageSize);
-        query.setMaxResults(pageSize);
-        List<TbDeviceAlarmsVO> tbDeviceAlarmsVOS = BeanHelp.copyWithCollection(query.list(), TbDeviceAlarmsVO.class);
-        result.setPageList(tbDeviceAlarmsVOS);
-        result.setPageNo(pageNo);
-        return result;
-    }
-
-    @Override
-    public Map<String, Object> listHistryAlarmsTj() {
-        List<TbDeviceAlarmsDTO> list = getSession().createQuery("from TbDeviceAlarmsDTO ").list();
-        Map<String, Object> result = new HashMap<>();
-        //历史告警总数
-        result.put("total", list.size());
-        //未处理告警
-        long count = list.stream().filter(s -> s.getStatus() == 0).count();
-        //离线告警数
-        long offline = list.stream().filter(s -> "1".equals(s.getSerial())).count();
-        //   号1离线2异动32故障 3液位告警 4 电量告警
-        long YD = list.stream().filter(s -> "32".equals(s.getSerial())).count();
-        long YW = list.stream().filter(s -> "3".equals(s.getSerial())).count();
-        long DL = list.stream().filter(s -> "4".equals(s.getSerial())).count();
-        //未处理数
-        result.put("untreated", count);
-        result.put("offline", offline);
-        result.put("YD", YD);
-        result.put("YW", YW);
-        result.put("DL", DL);
-        return result;
-    }
-
-    @Override
-    public Result<?> updateAlarm(Integer id) {
-        List<TbDeviceAlarmsDTO> list = getSession().createQuery("from TbDeviceAlarmsDTO t  where t.status=0 and t.id=" + id + "").list();
-        if (ListUtil.isBlank(list)) {
-            return Result.error("告警不存在!");
-        }
-        TbDeviceAlarmsDTO o = list.get(0);
-        o.setStatus(1);
-        getSession().update(o);
-        return Result.OK("操作成功!");
-    }
-
-    public static void main(String[] args) {
-        String time = "2020/12/8 12:45";
-        String substring = time.substring(0, time.indexOf(" "));
-        System.out.println("substring = " + substring);
-    }
-}
-

+ 36 - 16
src/main/java/com/usky/utils/AuthorizationUtils.java

@@ -1,31 +1,51 @@
 package com.usky.utils;
 
 
-
 import com.usky.config.shiro.UserRealm;
+import com.usky.constant.Constant;
+import com.usky.entity.ResponseBean;
+import com.usky.entity.sys.vo.SysUserVO;
+import com.usky.exception.CustomException;
+import com.usky.service.sys.user.UserService;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.mgt.RealmSecurityManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
 
 /**
  * 用户授权信息
- *
  */
-public class AuthorizationUtils
-{
-    /**
-     * 清理所有用户授权信息缓存
-     */
-    public static void clearAllCachedAuthorizationInfo()
-    {
-        getUserRealm().clearAllCachedAuthorizationInfo();
-    }
+@Component
+public class AuthorizationUtils {
+    private static RedisUtil redisUtil;
+    @Autowired
+    private RedisUtil redisUtil2;
 
+    @PostConstruct
+    public void beforeInit() {
+        redisUtil = redisUtil2;
+    }
     /**
-     * 获取自定义Realm
+     * 清理所有用户授权信息缓存
      */
-    public static UserRealm getUserRealm()
-    {
-        RealmSecurityManager rsm = (RealmSecurityManager) SecurityUtils.getSecurityManager();
-        return (UserRealm) rsm.getRealms().iterator().next();
+    public static void clearAllCachedAuthorizationInfo() {
+        SysUserVO sysUserVo = ShiroUtils.getSysUserVo();
+        if (redisUtil.hasKey(Constant.PREFIX_SHIRO_CACHE + sysUserVo.getLoginName())) {
+            redisUtil.del(Constant.PREFIX_SHIRO_CACHE + sysUserVo.getLoginName());
+        } else {
+            throw new CustomException("剔除失败,Account不存在(Deletion Failed. Account does not exist.)");
+        }
     }
+//
+//    /**
+//     * 获取自定义Realm
+//     */
+//    public static UserRealm getUserRealm()
+//    {
+//        RealmSecurityManager rsm = (RealmSecurityManager) SecurityUtils.getSecurityManager();
+//        return (UserRealm) rsm.getRealms().iterator().next();
+//    }
 }

+ 1 - 1
src/main/java/com/usky/utils/RedisUtil.java

@@ -582,7 +582,7 @@ public class RedisUtil {
      * @param keyPrefix
      * @return
      */
-    private Set<String> keys(String keyPrefix) {
+    public Set<String> keys(String keyPrefix) {
         String realKey = keyPrefix + "*";
 
         try {

+ 31 - 1
src/main/java/com/usky/utils/ShiroUtils.java

@@ -3,6 +3,7 @@ package com.usky.utils;
 import com.usky.constant.Constant;
 import com.usky.entity.sys.SysUserDTO;
 import com.usky.entity.sys.vo.SysUserVO;
+import com.usky.exception.CustomException;
 import com.usky.service.sys.user.UserService;
 import com.usky.utils.jwt.JwtUtil;
 import org.apache.shiro.SecurityUtils;
@@ -13,25 +14,47 @@ import org.apache.shiro.subject.SimplePrincipalCollection;
 import org.apache.shiro.subject.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+
 import javax.annotation.PostConstruct;
+
 @Component
 public class ShiroUtils {
+    private static RedisUtil redisUtil;
+    @Autowired
+    private RedisUtil redisUtil2;
+
+    @PostConstruct
+    public void beforeInit1() {
+        redisUtil = redisUtil2;
+    }
+
     private static UserService userService;
     @Autowired
     private UserService userService2;
+
     @PostConstruct
     public void beforeInit() {
         userService = userService2;
     }
+
     public static Subject getSubject() {
         return SecurityUtils.getSubject();
     }
+
     public static Session getSession() {
         return SecurityUtils.getSubject().getSession();
     }
+
     public static void logout() {
-        getSubject().logout();
+        SysUserVO sysUserVo = getSysUserVo();
+
+        if (redisUtil.hasKey(Constant.PREFIX_SHIRO_ACCESS_TOKEN + sysUserVo.getLoginName())) {
+            redisUtil.del(Constant.PREFIX_SHIRO_ACCESS_TOKEN + sysUserVo.getLoginName());
+        } else {
+            throw new CustomException("剔除失败,token不存在");
+        }
     }
+
     public static SysUserDTO getSysUser() {
         SysUserDTO user = null;
         Object obj = getSubject().getPrincipal();
@@ -40,6 +63,7 @@ public class ShiroUtils {
         }
         return user;
     }
+
     public static SysUserVO getSysUserVo() {
         SysUserVO user = null;
         Object obj = getSubject().getPrincipal();
@@ -52,6 +76,7 @@ public class ShiroUtils {
         }
         return user;
     }
+
     public static void setSysUser(SysUserDTO user) {
         Subject subject = getSubject();
         PrincipalCollection principalCollection = subject.getPrincipals();
@@ -60,18 +85,23 @@ public class ShiroUtils {
         // 重新加载Principal
         subject.runAs(newPrincipalCollection);
     }
+
     public static Integer getUserId() {
         return getSysUser().getUserId();
     }
+
     public static Integer getUserVOId() {
         return getSysUserVo().getUserId();
     }
+
     public static String getLoginName() {
         return getSysUserVo().getLoginName();
     }
+
     public static String getIp() {
         return getSubject().getSession().getHost();
     }
+
     public static String getSessionId() {
         return String.valueOf(getSubject().getSession().getId());
     }