Commit be2c63e2 authored by 赵啸非's avatar 赵啸非

更新菜单树列表

parent 0361dead
......@@ -39,8 +39,7 @@ password|String|用户密码|是|-
{
"loginName":"zhang3",
"password":"123456",
"securityCode":"5455"
"password":"123456"
}
```
......@@ -50,19 +49,102 @@ password|String|用户密码|是|-
---|---|---|---
code|Integer|结果码(-1.失败,1.成功)|-
msg|String|消息|-
data|Object|数据对象|-
 token|String|jwt token认证信息|-
 user|Object|用户信息|-
  id|Long|用户ID
  loginName|String|登录名
  realName|String|用户名
  mobile|String|用户手机号
  phone|String|用户联系电话
  email|String|用户邮箱
  qq|String|QQ号码
  siteIds|String|所属站点id,多个逗号分隔
  areaCodes|String|所属区域code,多个逗号分隔
  menuList|Arrays|菜单列表,树结构
   id|Long|菜单ID,主键
   name|String|菜单名称
   url|String|连接地址
   parentId|Long|父菜单ID,一级菜单的该字段值为-1
   linkType|Integer|链接方式,(0.内链,1.外链,2.脚本)
   imgPath|String|主菜单图标,主菜单图标的css样式名
   buttonImgPath|String|按钮图标
   imgCommPath|String|常用菜单图标
   visible|Integer|菜单显示(0.隐藏,1.显示)
   menuType|Integer|菜单类型(0.目录,1.菜单,2.按钮)
   status|Integer|菜单状态(0.禁用,1.启用)
   authType|Integer|权限类型(0.无限制,1.无需登录查看,2.需要登录查看,3.需要角色权限查看)
   orderId|Integer|排序编号
   childList|Arrays|菜单子列表
**响应消息样例:**
```
{
"msg":"登录成功",
"msg":"用户登录系统成功!",
"code":1,
"data":{
"user":{
"areaCodes":"",
"createTime":1654132346000,
"createUserId":1,
"createUserName":"admin",
"expireTime":1654223524841,
"id":1,
"lastLoginAddress":"127.0.0.1",
"lastLoginTime":1654132346000,
"loginName":"admin",
"loginTime":1654137124841,
"manager":false,
"menuList":[
{
"authType":0,
"childList":[
{
"authType":1,
"childList":[
{
"authType":1,
"childList":[
],
"id":3,
"linkType":1,
"menuType":2,
"name":"排号系统",
"orderId":3,
"parentId":2,
"status":1,
"url":"http://www.baidu.com",
"visible":1
}
],
"id":2,
"linkType":0,
"menuType":0,
"name":"聚集服务",
"orderId":2,
"parentId":1,
"status":1,
"visible":1
}
],
"id":1,
"linkType":0,
"menuType":0,
"name":"数据管理",
"orderId":1,
"parentId":-1,
"status":1,
"visible":1
}
],
"mobile":"13808095770",
"realName":"系统管理员",
"siteIds":""
},
"token":"eyJhbGciOiJIUzI1NiJ9.eyJsb2dpbl91c2VyX2tleSI6IjI0OGNlYTkxYzZlNTQ4MTU5ZWQ2MWYzNjgxNDg4ZDY3In0.XOwzDtTpAayGbH8auQbG96Qqmd1sivx8w59S60pm19g"
}
}
```
### 登出
......
......@@ -62,33 +62,18 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
loginForm.validate();
userEntity = userService.doLogin(loginName, password, ip);
userEntity.setLastLoginAddress(ip);
recordSysLog(request, userEntity, "用户登录系统成功!");
//根据用户id获取角色所分配的资源路径
// Set<String> urls = resourceService.findUrlSetByUserId(userEntity.getId());
// //菜单列表
// List<MenuEntity> menuList = menuService.findTreeMenu(userEntity, urls);
// userEntity.setMenuList(menuList);
// List<ModelEntity> modelList = this.service.findModelList(userEntity.getId());
// userEntity.setModelList(modelList);
List<MenuEntity> menuList =menuService.findTreeMenuByUser(userEntity);
List<MenuEntity> menuList = menuService.findTreeMenuByUser(userEntity);
userEntity.setMenuList(menuList);
userEntity.setLoginTime(System.currentTimeMillis());
userEntity.setToken(IdUtil.fastSimpleUUID());
userEntity.setExpireTime(DateUtils.addCurrDate(7).getTime());
//userEntity.setMenuUrl(generateMenuUrlCode(urls));
String token = authTokenService.createToken(userEntity);
//generateMenuUrlCode(urls);
//this.generateBlackCookie(request, response, loginName, urls);
data.put("token", token);
data.put("user", userEntity);
recordSysLog(request, userEntity, "用户登录系统成功!");
ret.put(KEY_RESULT_DATA, data);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, "用户登录系统成功!");
//ret.put("resources", urls);
return ret.toJSONString();
} catch (Exception e) {
log.error("login error ", e);
......@@ -111,75 +96,15 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
if (user == null) {
return "";
}
//Set<String> urls = resourceService.findUrlSetByUserId(user.getId());
//List<MenuEntity> outlookBarList = menuService.findTreeMenu(user, urls);
String currUserName = user.getRealName();
if (currUserName == null || currUserName.trim().length() == 0) {
currUserName = "管理员";
}
UserEntity userEntity = userService.get(user.getId());
List<MenuEntity> menuList = menuService.findTreeMenuByUser(userEntity);
userEntity.setMenuList(menuList);
JSONObject data = new JSONObject();
//data.put("barList", outlookBarList);
data.put("id", user.getId());
data.put("userType", user.getUserType());
data.put("user", userEntity);
ret.put(KEY_RESULT_DATA, data);
//this.generateBlackCookie(request, response, user.getLoginName(), urls);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, "用户登录系统成功!");
//ret.put("resources", urls);
return ret.toJSONString();
}
private void generateBlackCookie(HttpServletRequest request, HttpServletResponse response, String loginName, Set<String> urls) {
try {
String cacheKey = RedisKey.KEY_MENU_CACHE + loginName;
String securityKey = GlobalSysInfo.getPropertyValue(SysConstains.PROP_COOKIE_SECURITY_KEY);
//应为Cookie会超长,所以改为仅存储key将值放入redis
//CookieService.setCookieForAuth(request, response, securityKey, null);
StringBuilder sb = new StringBuilder();
if (urls != null && urls.size() > 0) {
for (String url : urls) {
int index = url.hashCode() & (Integer.MAX_VALUE - 1);
sb.append(index).append(",");
}
}
String menuUrl = sb.toString();
menuUrl = AESUtil.encrypt(menuUrl, securityKey);
cacheService.set(cacheKey, menuUrl, 604800);
HttpUtil.setCookieValue(request, response, SysConstains.COOKIE_MENU, cacheKey, -1);
} catch (Throwable e) {
}
}
private String generateMenuUrlCode(Set<String> urls) {
try {
String securityKey = GlobalSysInfo.getPropertyValue(SysConstains.PROP_COOKIE_SECURITY_KEY);
StringBuilder sb = new StringBuilder();
if (urls != null && urls.size() > 0) {
for (String url : urls) {
int index = url.hashCode() & (Integer.MAX_VALUE - 1);
sb.append(index).append(",");
}
}
String menuUrl = sb.toString();
return AESUtil.encrypt(menuUrl, securityKey);
} catch (Throwable e) {
log.error("编码异常", e);
return null;
}
}
@RequestMapping("parseToken")
public IUser parseToken() throws Exception {
IUser userEntity = authTokenService.getLoginUser(request);
if (!ObjectUtils.isEmpty(userEntity)) {
authTokenService.verifyToken(userEntity);
return userEntity;
}
return null;
}
}
......@@ -3,6 +3,8 @@ package com.mortals.xhx.module.user.model;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
......@@ -25,10 +27,12 @@ public class UserEntity extends UserVo implements IUser {
/**
* 登录密码,使用md5双次加密
*/
@JSONField(serialize = false)
private String loginPwd;
/**
* 登录限制地址,多个IP地址用逗号分隔,可以使用IP段匹配,如:172.17.*非空:则只能该值内的IP可以登录
*/
@JSONField(serialize = false)
private String loginLimitAddress;
/**
* 用户名
......@@ -53,6 +57,7 @@ public class UserEntity extends UserVo implements IUser {
/**
* 用户类型(0.系统用户,1.普通用户,2.工作人员)
*/
@JSONField(serialize = false)
private Integer userType;
/**
* 所属站点id,多个逗号分隔
......@@ -65,18 +70,22 @@ public class UserEntity extends UserVo implements IUser {
/**
* 用户状态(0.停用,1.正常,2.冻结,3.销户,4.离职)
*/
@JSONField(serialize = false)
private Integer status;
/**
* 创建用户名称
*/
@JSONField(serialize = false)
private String createUserName;
/**
* 最后一次登录时间
*/
@JSONField(serialize = false)
private Date lastLoginTime;
/**
* 最后一次登录地址
*/
@JSONField(serialize = false)
private String lastLoginAddress;
......
package com.mortals.xhx.module.user.model.vo;
import com.alibaba.fastjson.annotation.JSONField;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.framework.service.IUser;
import com.mortals.xhx.module.menu.model.MenuEntity;
......@@ -14,18 +15,12 @@ import java.util.List;
*/
@Data
public class UserVo extends BaseEntityLong {
/**
* 站点名称
*/
//private String siteName;
/**
* 唯一标识
*/
@JSONField(serialize = false)
private String token;
/**
* 菜单栏
*/
private String menuUrl;
/**
* 登录时间
......@@ -37,11 +32,6 @@ public class UserVo extends BaseEntityLong {
*/
private Long expireTime;
/**
* 模块列表
*/
//private List<ModelEntity> modelList;
/**
* 菜单列表
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment