manage模块:
登陆功能完善,增加了过滤前端不需要参数的功能。
注销功能完成
2 files added
9 files modified
292 ■■■■ changed files
screen-common/src/main/java/com/moral/constant/Constants.java 10 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/ObjectUtils.java 4 ●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/TokenUtils.java 14 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/AccountController.java 28 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/ManageMenu.java 2 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/ManageRole.java 1 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/Menu.java 6 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/AccountInfoDTO.java 40 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/LoginDTO.java 61 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java 25 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java 101 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/constant/Constants.java
@@ -25,6 +25,11 @@
    * */
    public static final String MSG_TOKEN_CREATE_ERROR = "token生成失败,请联系管理员";
    /*
    * 前端传入参数不完整
    * */
    public static final String MSG_PARAMETER_IS_MISSING = "参数不全";
    /**
     * 操作成功code
     */
@@ -34,6 +39,11 @@
     */
    public static final int CODE_OPERATION_FAILED = -1;
    /*
    * 前端传入参数不完整
    * */
    public static final int CODE_PARAMETER_IS_MISSING = -2;
    /**
     * token校验失败
     */
screen-common/src/main/java/com/moral/util/ObjectUtils.java
@@ -11,13 +11,13 @@
 **/
public class ObjectUtils {
    /**
    * @Description: 判断map以及map中的Key是否完整
    * @Description: 判断map以及map中的Key有没有空值,如果有返回false,没有返回true。
            * @Param: [map, keys]
            * @return: boolean
            * @Author: 陈凯裕
            * @Date: 2021/3/10
            */
    public static boolean checkParamAndMap(Map<String,Object> map,String ... keys){
    public static boolean isNotAllEmpty(Map<String,Object> map,String ... keys){
        if(null==map)
            return false;
        for (String key : keys) {
screen-common/src/main/java/com/moral/util/TokenUtils.java
@@ -37,13 +37,13 @@
    private static final int validity_time = 60*30;
    /**
     * @Description: 生成token
     * @Param: [type, uid] type: 后台取值:manage  前台取值:api
     * @Description: 生成token,并且将用户信息存入缓存
     * @Param: [uid] type: 后台取值:manage  前台取值:api
     * @return: java.lang.String
     * @Author: 陈凯裕
     * @Date: 2021/3/10
     */
    public static String getToken(String uid, Map<String, Object> userInfo) {
    public static String getToken(String uid, Object userInfo) {
        //生成加密token
        try {
            //生成token
@@ -62,8 +62,8 @@
            log.error("token生成异常:"+e.getMessage());
            throw new TokenException(Constants.CODE_TOKEN_CREATE_ERROR,Constants.MSG_TOKEN_CREATE_ERROR);
        }
    }
    /**
     * @Description: 校验token
@@ -90,14 +90,14 @@
    }
    /**
     * @Description: 通过token获取用户信息
     * @Description: 通过token获取用户信息  前台使用
     * @Param: [token]
     * @return: java.util.Map<java.lang.String   ,   java.lang.Object>
     * @Author: 陈凯裕
     * @Date: 2021/3/11
     */
    public static Map<String, Object> getUserInfoByToken(String token) {
        Map<String, Object> userInfo = (Map<String, Object>) redisTemplate.opsForValue().get(token);
    public static Object getUserInfoByToken(String token) {
        Object userInfo = redisTemplate.opsForValue().get(token);
        if(userInfo==null)
            throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR);
        return userInfo;
screen-manage/src/main/java/com/moral/api/controller/AccountController.java
@@ -1,6 +1,8 @@
package com.moral.api.controller;
import com.moral.api.pojo.dto.LoginDTO;
import com.moral.api.service.ManageAccountService;
import com.moral.constant.Constants;
import com.moral.constant.ResultMessage;
import com.moral.util.ObjectUtils;
import io.swagger.annotations.*;
@@ -27,22 +29,30 @@
    @PostMapping("login")
    public ResultMessage login(@RequestBody Map<String, Object> paramters) {
        if (!ObjectUtils.checkParamAndMap(paramters, "account", "password"))
            return ResultMessage.fail("参数不完整");
    public ResultMessage login(@RequestBody Map<String, Object> parameters) {
        if (!ObjectUtils.isNotAllEmpty(parameters, "account", "password"))
            return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING);
        String AESAccount = (String) parameters.get("account");
        String AESPassword = (String) parameters.get("password");
        Map<String, Object> result = accountService.login(paramters);
        LoginDTO loginDTO = accountService.login(AESAccount,AESPassword);
        if ((int) result.get("accountId") < 0)
            return ResultMessage.fail(result);
        return ResultMessage.ok(result);
        if(loginDTO.getCode().equals(LoginDTO.SUCCESS))
            return ResultMessage.ok(loginDTO);
        return ResultMessage.fail(loginDTO);
    }
    @PostMapping("logout")
    public ResultMessage logout(@RequestBody Map<String, Object> paramters, HttpServletRequest request) {
    public ResultMessage logout(@RequestBody Map<String, Object> parameters, HttpServletRequest request) {
        if(!ObjectUtils.isNotAllEmpty(parameters,"accountId"))
            return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING);
        String token = request.getHeader("token");
        return null;
        if(accountService.logout(String.valueOf(parameters.get("accountId")),token))
            return ResultMessage.ok("注销成功");
        return ResultMessage.fail("注销异常");
    }
screen-manage/src/main/java/com/moral/api/entity/ManageMenu.java
@@ -8,6 +8,7 @@
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -21,6 +22,7 @@
 */
@Data
@EqualsAndHashCode(callSuper = false)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class ManageMenu extends Model<ManageMenu> {
    private static final long serialVersionUID = 1L;
screen-manage/src/main/java/com/moral/api/entity/ManageRole.java
@@ -7,6 +7,7 @@
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
screen-manage/src/main/java/com/moral/api/entity/Menu.java
@@ -5,6 +5,8 @@
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -56,12 +58,12 @@
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    private Date createTime;
    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
    private Date updateTime;
    /**
     * 是否删除
screen-manage/src/main/java/com/moral/api/pojo/dto/AccountInfoDTO.java
New file
@@ -0,0 +1,40 @@
package com.moral.api.pojo.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.entity.ManageMenu;
import lombok.Data;
import java.util.List;
/**
 * @ClassName AccountInfoDto
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/12 13:51
 * @Version TODO
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class AccountInfoDTO {
    /*
    * 用户Id
    * */
    private String accountId;
    /*
    * 用户名称
    * */
    private String accountName;
    /*
    * 用户角色
    * */
    private List<String> roles;
    /*
    * 用户菜单
    * */
    private List<ManageMenu> menus;
}
screen-manage/src/main/java/com/moral/api/pojo/dto/LoginDTO.java
New file
@@ -0,0 +1,61 @@
package com.moral.api.pojo.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
/**
 * @ClassName LoginDTO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/12 14:49
 * @Version TODO
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class LoginDTO {
    /*
    * 登陆成功
    * */
    public static final String SUCCESS = "0";
    /*
    * 用户不存在
    * */
    public static final String NOT_EXIST = "-1";
    /*
    * 用户已被封禁
    * */
    public static final String IS_DELETE = "-2";
   /*
   * 密码错误
   * */
   public static final String PASSWORD_ERROR = "-3";
   /*
   * 角色尚未分配
   * */
   public static final String ROLE_EMPTY = "-4";
   /*
   * 菜单尚未分配
   * */
   public static final String MENU_EMPTY = "-5";
   /*
   * 状态码
   * */
    private String code;
    /*
    *用户token
    * */
    private String token;
    /*
    * 用户基本信息
    * */
    private AccountInfoDTO accountInfo;
}
screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java
@@ -2,6 +2,7 @@
import com.moral.api.entity.ManageAccount;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moral.api.pojo.dto.LoginDTO;
import java.util.Map;
@@ -15,20 +16,20 @@
 */
public interface ManageAccountService extends IService<ManageAccount> {
    /**
    * @Description: 登陆使用
            * @Param: [paramters]
    * @Description: 登陆
            * @Param: [AESAccount, AESPassword]
            * @return: java.util.Map<java.lang.String,java.lang.Object>
            * @Author: 陈凯裕
            * @Date: 2021/3/11
            * @Date: 2021/3/12
            */
    Map<String, Object> login(Map<String, Object> paramters);
    LoginDTO login(String AESAccount, String AESPassword);
    /**
    * @Description: 注销使用
            * @Param: [paramters]
            * @return: java.util.Map<java.lang.String,java.lang.Object>
            * @Author: 陈凯裕
            * @Date: 2021/3/11
            */
    Map<String, Object> logout(Map<String, Object> paramters);
   /**
   * @Description: 注销
           * @Param: [accountId, token]
           * @return: java.util.Map<java.lang.String,java.lang.Object>
           * @Author: 陈凯裕
           * @Date: 2021/3/12
           */
   boolean logout(String accountId,String token);
}
screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
@@ -7,6 +7,8 @@
import com.moral.api.mapper.ManageAccountMapper;
import com.moral.api.mapper.ManageMenuMapper;
import com.moral.api.mapper.ManageRoleMapper;
import com.moral.api.pojo.dto.AccountInfoDTO;
import com.moral.api.pojo.dto.LoginDTO;
import com.moral.api.service.ManageAccountService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.util.AESUtils;
@@ -41,86 +43,99 @@
    /**
     * @Description: 登陆
     * @Param: [paramters]
     * @Param: [parameters]
     * @return: java.util.Map<java.lang.String   ,   java.lang.Object>
     * @Author: 陈凯裕
     * @Date: 2021/3/11
     */
    @Override
    public Map<String, Object> login(Map<String, Object> paramters) {
        Map<String, Object> result = new HashMap<>();
        //接收参数
        String cyrpAccount = (String) paramters.get("account");
        String cyrpPassword = (String) paramters.get("password");
    public LoginDTO login(String AESAccount,String AESPassword) {
        LoginDTO loginDTO = new LoginDTO();
        //解密
        String account = AESUtils.decrypt(cyrpAccount, AESKey);
        String password = AESUtils.decrypt(cyrpPassword, AESKey);
        String account = AESUtils.decrypt(AESAccount, AESKey);
        String password = AESUtils.decrypt(AESPassword, AESKey);
        //查询是否存在
        QueryWrapper<ManageAccount> wrapper = new QueryWrapper<>();
        wrapper.eq("account", account);
        ManageAccount manageAccount = accountMapper.selectOne(wrapper);
        if (ObjectUtils.isEmpty(manageAccount)) {
            result.put("accountId", -1);
            result.put("msg", "用户不存在");
            return result;
            loginDTO.setCode(LoginDTO.NOT_EXIST);
            return loginDTO;
        }
        //查询是否逻辑删除
        if (manageAccount.getIsDelete().equals("1")) {
            result.put("accountId", -2);
            result.put("msg", "用户已被封禁");
            return result;
            loginDTO.setCode(LoginDTO.IS_DELETE);
            return loginDTO;
        }
        //校验密码
        if (!MD5Utils.saltMD5Verify(password, manageAccount.getPassword())) {
            result.put("accountId", -3);
            result.put("msg", "用户名密码错误");
            return result;
            loginDTO.setCode(LoginDTO.PASSWORD_ERROR);
            return loginDTO;
        }
        //查询角色
        List<ManageRole> roles = roleMapper.getManageRoleByAccountId(manageAccount.getId());
        if (ObjectUtils.isEmpty(roles)) {
            result.put("accountId", -4);
            result.put("msg", "用户尚未分配角色");
            return result;
        if (ObjectUtils.isEmpty(roles)) {//判断账号是否存在角色
            loginDTO.setCode(LoginDTO.ROLE_EMPTY);
            return loginDTO;
        }
        //查询菜单
        List<ManageMenu> menus = manageMenuMapper.getParentChildrenMenusByRoles(roles);
        if (ObjectUtils.isEmpty(menus)) {
            result.put("accountId", -5);
            result.put("msg", "用户尚未分配菜单");
            return result;
        if (ObjectUtils.isEmpty(menus)) {//判断账号是否存在菜单
            loginDTO.setCode(LoginDTO.MENU_EMPTY);
            return loginDTO;
        }
        //获取用户token,并且将基本信息存入缓存
        Map<String, Object> userInfo = new HashMap<>();//需要保存在缓存中用户的数据
        userInfo.put("accountId", manageAccount.getId());//用户Id
        userInfo.put("userName", manageAccount.getUserName());//用户名称
        userInfo.put("roles", roles);//用户角色
        userInfo.put("menus", menus);//用户菜单
        String token = TokenUtils.getToken(String.valueOf(manageAccount.getId()), userInfo);
        //封装用户信息
        AccountInfoDTO accountInfoDTO = new AccountInfoDTO();
        /*获取角色名称集合*/
        ArrayList<String> roleNames = new ArrayList<>();
        roles.forEach(role->roleNames.add(role.getName()));
        /*过滤menu无用属性*/
        for (ManageMenu menu : menus) {
            menu.setCreateTime(null);
            menu.setIsDelete(null);
            menu.setUpdateTime(null);
            menu.setParentId(null);
            List<ManageMenu> children = menu.getChildren();
            for (ManageMenu child : children) {
                child.setCreateTime(null);
                child.setIsDelete(null);
                child.setUpdateTime(null);
                child.setParentId(null);
            }
        }
        accountInfoDTO.setAccountId(String.valueOf(manageAccount.getId()));
        accountInfoDTO.setAccountName(manageAccount.getUserName());
        accountInfoDTO.setMenus(menus);
        accountInfoDTO.setRoles(roleNames);
        //打包返回信息
        result.put("accountId", manageAccount.getId());//用户Id
        result.put("userName", manageAccount.getUserName());//用户名称
        result.put("roles", roles);//用户角色
        result.put("menus", menus);//用户菜单
        result.put("token", token);
        return result;
        //获取token 并且存入缓存
        String token = TokenUtils.getToken(String.valueOf(manageAccount.getId()), accountInfoDTO);
        //封装返回结果
        loginDTO.setCode(LoginDTO.SUCCESS);
        loginDTO.setAccountInfo(accountInfoDTO);
        loginDTO.setToken(token);
        return loginDTO;
    }
    /**
     * @Description: 注销
     * @Param: [paramters]
     * @Param: [parameters]
     * @return: java.util.Map<java.lang.String   ,   java.lang.Object>
     * @Author: 陈凯裕
     * @Date: 2021/3/11
     */
    @Override
    public Map<String, Object> logout(Map<String, Object> paramters) {
        return null;
    public boolean logout(String accountId,String token) {
        TokenUtils.destoryToken(accountId,token);
        return true;
    }
}