Browse Source

适配远程调用

hexiao 1 year ago
parent
commit
a6a89aa1a1

+ 3 - 1
api/src/main/java/com/ankaibei/workflow/api/LoginApi.java

@@ -4,12 +4,14 @@ import com.ankaibei.workflow.vo.LoginInfo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Map;
+
 @FeignClient(name = "loginApi", url = "${api-url:localhost:8077/api}")
 public interface LoginApi {
 
 
     @PostMapping("/admin/upms/login/doLogin")
-    String doLogin (@RequestBody LoginInfo loginInfo);
+    Map doLogin (@RequestBody LoginInfo loginInfo);
 
     @PostMapping("/admin/upms/login/doLogout")
     String doLogout ();

+ 15 - 0
api/src/main/java/com/ankaibei/workflow/api/SysUserApi.java

@@ -0,0 +1,15 @@
+package com.ankaibei.workflow.api;
+
+
+import com.ankaibei.workflow.vo.SysUser;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient(name = "sysUserApi", url = "${api-url:localhost:8077/api/foreign}")
+public interface SysUserApi {
+
+    @GetMapping("/admin/upms/user/getUserInfoByUserName")
+    SysUser getUserInfoByUserName(@RequestParam("userName")String userName);
+
+}

+ 69 - 0
api/src/main/java/com/ankaibei/workflow/config/FeignHeadersInterceptor.java

@@ -0,0 +1,69 @@
+package com.ankaibei.workflow.config;
+
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.apache.tomcat.util.json.JSONParser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.configurationprocessor.json.JSONObject;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+
+@Configuration
+public class FeignHeadersInterceptor implements RequestInterceptor {
+
+    private static Logger log = LoggerFactory.getLogger(FeignHeadersInterceptor.class);
+
+    @Override
+    public void apply(RequestTemplate requestTemplate) {
+        HttpServletRequest request = getHttpServletRequest();
+
+        if (Objects.isNull(request)) {
+            return;
+        }
+
+        Map<String, String> headers = getHeaders(request);
+        log.info("FeignHeaders:{}", JSON.toJSONString(headers));
+        if (headers.size() > 0) {
+            Iterator<Map.Entry<String, String>> iterator = headers.entrySet().iterator();
+            while (iterator.hasNext()) {
+                Map.Entry<String, String> entry = iterator.next();
+                // 把请求过来的header请求头 原样设置到feign请求头中
+                // 包括token
+                requestTemplate.header(entry.getKey(), entry.getValue());
+            }
+        }
+    }
+
+
+    private HttpServletRequest getHttpServletRequest() {
+
+        try {
+            // 这种方式获取的HttpServletRequest是线程安全的
+            return ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
+        } catch (Exception e) {
+
+            return null;
+        }
+    }
+
+    private Map<String, String> getHeaders(HttpServletRequest request) {
+
+        Map<String, String> map = new LinkedHashMap<>();
+
+        Enumeration<String> enums = request.getHeaderNames();
+        while (enums.hasMoreElements()) {
+            String key = enums.nextElement();
+            String value = request.getHeader(key);
+            map.put(key, value);
+        }
+
+        return map;
+    }
+}

+ 6 - 0
api/src/main/java/com/ankaibei/workflow/vo/LoginInfo.java

@@ -1,8 +1,14 @@
 package com.ankaibei.workflow.vo;
 
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 @Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class LoginInfo {
 
     private String loginName;

+ 69 - 0
api/src/main/java/com/ankaibei/workflow/vo/SysUser.java

@@ -0,0 +1,69 @@
+package com.ankaibei.workflow.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysUser {
+
+    private static final long serialVersionUID = 1L;
+
+   // 主键id
+    private String id;
+
+    // 用户名
+    private String username;
+
+    // 密码
+    private String password;
+
+    // 姓名
+    private String name;
+
+    // 手机
+    private String phone;
+
+
+    // 邮箱
+    private String email;
+
+    // "所在地--省份或城市"
+    private String provinceOrCityId;
+
+    //"头像地址"
+    private String headUrl;
+
+    //"公司id"
+    private String deptId;
+
+    // 描述
+    private String description;
+
+    // 状态(1:正常 0:停用)
+
+    private Integer status;
+
+
+//    private List<SysRole> roleList;
+    //部门
+
+    private String deptName;
+
+    /**
+     * 角色组
+     */
+
+    private Long[] roleIds;
+
+    private Boolean isAdmin;
+
+    // 权利列表
+    private List<String> userPermsList;
+}

+ 0 - 394
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/api/LoginApiService.java

@@ -1,394 +0,0 @@
-//package com.ankaibei.workFlow.webadmin.api;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.util.StrUtil;
-//import com.alibaba.fastjson.JSON;
-//import com.alibaba.fastjson.JSONArray;
-//import com.alibaba.fastjson.JSONObject;
-//import com.alibaba.fastjson.serializer.SerializerFeature;
-//import com.ankaibei.workFlow.common.core.annotation.MyRequestBody;
-//import com.ankaibei.workFlow.common.core.annotation.NoAuthInterface;
-//import com.ankaibei.workFlow.common.core.constant.ApplicationConstant;
-//import com.ankaibei.workFlow.common.core.constant.ErrorCodeEnum;
-//import com.ankaibei.workFlow.common.core.object.CodeEnum;
-//import com.ankaibei.workFlow.common.core.object.ResMsg;
-//import com.ankaibei.workFlow.common.core.object.ResponseResult;
-//import com.ankaibei.workFlow.common.core.object.TokenData;
-//import com.ankaibei.workFlow.common.core.upload.BaseUpDownloader;
-//import com.ankaibei.workFlow.common.core.upload.UpDownloaderFactory;
-//import com.ankaibei.workFlow.common.core.upload.UploadResponseInfo;
-//import com.ankaibei.workFlow.common.core.upload.UploadStoreInfo;
-//import com.ankaibei.workFlow.common.core.util.*;
-//import com.ankaibei.workFlow.common.datafilter.config.DataFilterProperties;
-//import com.ankaibei.workFlow.common.log.annotation.OperationLog;
-//import com.ankaibei.workFlow.common.log.model.constant.SysOperationLogType;
-//import com.ankaibei.workFlow.common.online.api.config.OnlineApiProperties;
-//import com.ankaibei.workFlow.common.online.config.OnlineProperties;
-//import com.ankaibei.workFlow.common.online.model.OnlineDatasource;
-//import com.ankaibei.workFlow.common.online.service.OnlineDatasourceService;
-//import com.ankaibei.workFlow.common.online.util.OnlineUtil;
-//import com.ankaibei.workFlow.common.redis.cache.SessionCacheHelper;
-//import com.ankaibei.workFlow.webadmin.config.ApplicationConfig;
-//import com.ankaibei.workFlow.webadmin.upms.bo.SysMenuPerm;
-//import com.ankaibei.workFlow.webadmin.upms.controller.LoginController;
-//import com.ankaibei.workFlow.webadmin.upms.model.SysMenu;
-//import com.ankaibei.workFlow.webadmin.upms.model.SysUser;
-//import com.ankaibei.workFlow.webadmin.upms.model.SysUserPost;
-//import com.ankaibei.workFlow.webadmin.upms.model.SysUserRole;
-//import com.ankaibei.workFlow.webadmin.upms.model.constant.SysMenuType;
-//import com.ankaibei.workFlow.webadmin.upms.model.constant.SysOnlineMenuPermType;
-//import com.ankaibei.workFlow.webadmin.upms.model.constant.SysUserStatus;
-//import com.ankaibei.workFlow.webadmin.upms.model.constant.SysUserType;
-//import com.ankaibei.workFlow.webadmin.upms.service.*;
-//import com.ankaibei.workflow.api.LoginApi;
-//import io.swagger.annotations.ApiImplicitParam;
-//import io.swagger.annotations.ApiImplicitParams;
-//import org.redisson.api.RBucket;
-//import org.redisson.api.RedissonClient;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.security.crypto.password.PasswordEncoder;
-//import org.springframework.stereotype.Component;
-//import org.springframework.web.bind.annotation.GetMapping;
-//import org.springframework.web.bind.annotation.PostMapping;
-//import org.springframework.web.bind.annotation.RequestParam;
-//import org.springframework.web.multipart.MultipartFile;
-//
-//import javax.servlet.http.HttpServletResponse;
-//import java.net.URLDecoder;
-//import java.nio.charset.StandardCharsets;
-//import java.util.*;
-//import java.util.concurrent.TimeUnit;
-//import java.util.stream.Collectors;
-//
-//@Component
-//public class LoginApiService implements LoginApi {
-//    @Autowired
-//    private SysUserService sysUserService;
-//    @Autowired
-//    private SysMenuService sysMenuService;
-//    @Autowired
-//    private SysPermCodeService sysPermCodeService;
-//    @Autowired
-//    private SysPermService sysPermService;
-//    @Autowired
-//    private SysPostService sysPostService;
-//    @Autowired
-//    private SysRoleService sysRoleService;
-//    @Autowired
-//    private SysDataPermService sysDataPermService;
-//    @Autowired
-//    private SysPermWhitelistService sysPermWhitelistService;
-//    @Autowired
-//    private OnlineDatasourceService onlineDatasourceService;
-//    @Autowired
-//    private OnlineProperties onlineProperties;
-//    @Autowired
-//    private OnlineApiProperties onlineApiProperties;
-//    @Autowired
-//    private ApplicationConfig appConfig;
-//    @Autowired
-//    private RedissonClient redissonClient;
-//    @Autowired
-//    private SessionCacheHelper cacheHelper;
-//    @Autowired
-//    private PasswordEncoder passwordEncoder;
-//    @Autowired
-//    private UpDownloaderFactory upDownloaderFactory;
-//    @Autowired
-//    private DataFilterProperties dataFilterProperties;
-//
-//
-//
-//    @Override
-//    public String doLogin(String loginName, String password) {
-//        if (MyCommonUtil.existBlankArgument(loginName, password)) {
-//            return ResMsg.newInstance(CodeEnum.USER_NAME_PWD_NULL_CODE).toString();
-//        }
-//        String errorMessage;
-//        SysUser user = sysUserService.getSysUserByLoginName(loginName);
-//        try {
-//            password = URLDecoder.decode(password, StandardCharsets.UTF_8.name());
-//            // NOTE: 第一次使用时,请务必阅读ApplicationConstant.PRIVATE_KEY的代码注释。
-//            // 执行RsaUtil工具类中的main函数,可以生成新的公钥和私钥。
-//            password = RsaUtil.decrypt(password, ApplicationConstant.PRIVATE_KEY);
-//        } catch (Exception e) {
-//            return ResMsg.newInstance(CodeEnum.ACCOUNT_NO_PASSWORD_ERROR).toString();
-//        }
-//        if (user == null || !passwordEncoder.matches(password, user.getPassword())) {
-//            return ResMsg.error(CodeEnum.ACCOUNT_NO_PASSWORD_ERROR.getCode(), CodeEnum.ACCOUNT_NO_PASSWORD_ERROR.toString()).toString();
-//        }
-//        if (user.getUserStatus() == SysUserStatus.STATUS_LOCKED) {
-//            errorMessage = "登录失败,用户账号被锁定!";
-//            return ResMsg.error(CodeEnum.INVALID_USER_STATUS.getCode(), errorMessage).toString();
-//        }
-//        JSONObject jsonData = this.buildLoginData(user);
-//        return ResMsg.newInstance(CodeEnum.OK, jsonData).toString();
-//    }
-//
-//
-//    public String doLogout() {
-//        String sessionId = TokenData.takeFromRequest().getSessionId();
-//        String sessionIdKey = RedisKeyUtil.makeSessionIdKey(sessionId);
-//        redissonClient.getBucket(sessionIdKey).delete();
-//        redissonClient.getBucket(RedisKeyUtil.makeSessionWhiteListPermKey(sessionId)).deleteAsync();
-//        String menuPermPattern = RedisKeyUtil.getSessionMenuPermPrefix(sessionId) + "*";
-//        redissonClient.getKeys().deleteByPatternAsync(menuPermPattern);
-//        sysDataPermService.removeDataPermCache(sessionId);
-//        sysPermService.removeUserSysPermCache(sessionId);
-//        cacheHelper.removeAllSessionCache(sessionId);
-//        return ResponseResult.success().toString();
-//    }
-//
-//
-//    public String getLoginInfo() {
-//        TokenData tokenData = TokenData.takeFromRequest();
-//        // 这里解释一下为什么没有缓存menuList和permCodeList。
-//        // 1. 该操作和权限验证不同,属于低频操作。
-//        // 2. 第一次登录和再次获取登录信息之间,如果修改了用户的权限,那么本次获取的是最新权限。
-//        // 3. 上一个问题无法避免,因为即便缓存也是有过期时间的,过期之后还是要从数据库获取的。
-//        JSONObject jsonData = new JSONObject();
-//        jsonData.put("showName", tokenData.getShowName());
-//        jsonData.put("isAdmin", tokenData.getIsAdmin());
-//        if (StrUtil.isNotBlank(tokenData.getHeadImageUrl())) {
-//            jsonData.put("headImageUrl", tokenData.getHeadImageUrl());
-//        }
-//        Collection<SysMenu> menuList;
-//        Collection<String> permCodeList;
-//        if (tokenData.getIsAdmin()) {
-//            menuList = sysMenuService.getAllListByOrder("showOrder");
-//            permCodeList = sysPermCodeService.getAllPermCodeList();
-//        } else {
-//            menuList = sysMenuService.getMenuListByUserId(tokenData.getUserId());
-//            permCodeList = sysPermCodeService.getPermCodeListByUserId(tokenData.getUserId());
-//        }
-//        menuList = menuList.stream().filter(m -> m.getMenuType() <= SysMenuType.TYPE_MENU).collect(Collectors.toList());
-//        jsonData.put("menuList", menuList);
-//        jsonData.put("permCodeList", permCodeList);
-//        return ResponseResult.success(jsonData).toString();
-//    }
-//
-//
-//
-//
-//    private JSONObject buildLoginData(SysUser user) {
-//        int deviceType = MyCommonUtil.getDeviceType();
-//        boolean isAdmin = user.getUserType() == SysUserType.TYPE_ADMIN;
-//        Map<String, Object> claims = new HashMap<>(3);
-//        String sessionId = user.getLoginName() + "_" + deviceType + "_" + MyCommonUtil.generateUuid();
-//        claims.put("sessionId", sessionId);
-//        String token = JwtUtil.generateToken(claims, appConfig.getExpiration(), appConfig.getTokenSigningKey());
-//        JSONObject jsonData = new JSONObject();
-//        jsonData.put(TokenData.REQUEST_ATTRIBUTE_NAME, token);
-//        jsonData.put("showName", user.getShowName());
-//        jsonData.put("isAdmin", isAdmin);
-//        if (StrUtil.isNotBlank(user.getHeadImageUrl())) {
-//            jsonData.put("headImageUrl", user.getHeadImageUrl());
-//        }
-//        TokenData tokenData = this.buildTokenData(user, sessionId, deviceType);
-//        this.putTokenDataToSessionCache(tokenData);
-//        // 这里手动将TokenData存入request,便于OperationLogAspect统一处理操作日志。
-//        TokenData.addToRequest(tokenData);
-//        Collection<SysMenu> allMenuList;
-//        Collection<String> permCodeList;
-//        if (isAdmin) {
-//            allMenuList = sysMenuService.getAllListByOrder("showOrder");
-//            permCodeList = sysPermCodeService.getAllPermCodeList();
-//        } else {
-//            allMenuList = sysMenuService.getMenuListByUserId(Long.parseLong(user.getUserId()));
-//            permCodeList = sysPermCodeService.getPermCodeListByUserId(Long.parseLong(user.getUserId()));
-//        }
-//        List<SysMenu> menuList = allMenuList.stream()
-//                .filter(m -> m.getMenuType() <= SysMenuType.TYPE_MENU).collect(Collectors.toList());
-//        //jsonData.put("menuList", menuList);
-//        //jsonData.put("permCodeList", permCodeList);
-//        Set<String> permSet = null;
-//        if (!isAdmin) {
-//            // 所有登录用户都有白名单接口的访问权限。
-//            List<String> whitelist = this.getAndCacheWhitelist(sessionId);
-//            permSet = new HashSet<>(whitelist);
-//            if (StrUtil.isNotBlank(tokenData.getRoleIds())) {
-//                List<Long> roleIds = StrUtil.split(tokenData.getRoleIds(), ',')
-//                        .stream().map(Long::valueOf).collect(Collectors.toList());
-//                Set<String> menuPermSet = this.getAndCacheMenuPermData(allMenuList, roleIds);
-//                permSet.addAll(menuPermSet);
-//            }
-//        }
-//        List<SysMenu> onlineMenuList = allMenuList.stream()
-//                .filter(m -> m.getOnlineFormId() != null && m.getMenuType().equals(SysMenuType.TYPE_BUTTON))
-//                .collect(Collectors.toList());
-//        LoginApiService.OnlinePermData onlinePermData = this.getAndCacheOnlineMenuPermData(allMenuList, onlineMenuList);
-//        permCodeList.addAll(onlinePermData.permCodeSet);
-//        if (!isAdmin) {
-//            permSet.addAll(onlinePermData.permUrlSet);
-//            // 缓存用户的权限资源
-//            sysPermService.putUserSysPermCache(sessionId, Long.parseLong(user.getUserId()), permSet);
-//            sysDataPermService.putDataPermCache(sessionId, Long.parseLong(user.getUserId()), user.getDeptId());
-//        }
-//        return jsonData;
-//    }
-//
-//    private TokenData buildTokenData(SysUser user, String sessionId, int deviceType) {
-//        TokenData tokenData = new TokenData();
-//        tokenData.setSessionId(sessionId);
-//        tokenData.setUserId(Long.parseLong(user.getUserId()));
-//        tokenData.setDeptId(user.getDeptId());
-//        tokenData.setLoginName(user.getLoginName());
-//        tokenData.setShowName(user.getShowName());
-//        tokenData.setIsAdmin(user.getUserType().equals(SysUserType.TYPE_ADMIN));
-//        tokenData.setLoginIp(IpUtil.getRemoteIpAddress(ContextUtil.getHttpRequest()));
-//        tokenData.setLoginTime(new Date());
-//        tokenData.setDeviceType(deviceType);
-//        tokenData.setHeadImageUrl(user.getHeadImageUrl());
-//        List<SysUserPost> userPostList = sysPostService.getSysUserPostListByUserId(user.getUserId());
-//        if (CollUtil.isNotEmpty(userPostList)) {
-//            Set<String> deptPostIdSet = userPostList.stream().map(SysUserPost::getDeptPostId).collect(Collectors.toSet());
-//            tokenData.setDeptPostIds(StrUtil.join(",", deptPostIdSet));
-//            Set<String> postIdSet = userPostList.stream().map(SysUserPost::getPostId).collect(Collectors.toSet());
-//            tokenData.setPostIds(StrUtil.join(",", postIdSet));
-//        }
-//        List<SysUserRole> userRoleList = sysRoleService.getSysUserRoleListByUserId(user.getUserId());
-//        if (CollUtil.isNotEmpty(userRoleList)) {
-//            Set<String> userRoleIdSet = userRoleList.stream().map(SysUserRole::getRoleId).collect(Collectors.toSet());
-//            tokenData.setRoleIds(StrUtil.join(",", userRoleIdSet));
-//        }
-//        return tokenData;
-//    }
-//
-//    private void putTokenDataToSessionCache(TokenData tokenData) {
-//        String sessionIdKey = RedisKeyUtil.makeSessionIdKey(tokenData.getSessionId());
-//        String sessionData = JSON.toJSONString(tokenData, SerializerFeature.WriteNonStringValueAsString);
-//        RBucket<String> bucket = redissonClient.getBucket(sessionIdKey);
-//        bucket.set(sessionData);
-//        bucket.expire(appConfig.getSessionExpiredSeconds(), TimeUnit.SECONDS);
-//    }
-//
-//    private void putMenuPermToCache(String sessionId, SysMenuPerm menuPerm) {
-//        if (dataFilterProperties.getEnabledDataPermFilter()) {
-//            String menuPermKey = RedisKeyUtil.makeSessionMenuPermKey(sessionId, menuPerm.getMenuId());
-//            RBucket<String> cachedData = redissonClient.getBucket(menuPermKey);
-//            cachedData.set(JSON.toJSONString(menuPerm.getPermUrlSet()));
-//            cachedData.expire(appConfig.getSessionExpiredSeconds(), TimeUnit.SECONDS);
-//        }
-//    }
-//
-//    private List<String> getAndCacheWhitelist(String sessionId) {
-//        List<String> whitelistUrls = sysPermWhitelistService.getWhitelistPermList();
-//        if (dataFilterProperties.getEnabledDataPermFilter()) {
-//            // 白名单的数据缓存主要用户数据权限过滤是,如果菜单关联的权限中并不包含当前请求的url,则需要判断是否为白名单url。
-//            RBucket<String> cachedData = redissonClient.getBucket(RedisKeyUtil.makeSessionWhiteListPermKey(sessionId));
-//            cachedData.set(JSON.toJSONString(whitelistUrls));
-//            cachedData.expire(appConfig.getSessionExpiredSeconds(), TimeUnit.SECONDS);
-//        }
-//        return whitelistUrls;
-//    }
-//
-//    private Set<String> getAndCacheMenuPermData(Collection<SysMenu> allMenuList, List<Long> roleIds) {
-//        List<SysMenuPerm> allMenuPermList = MyModelUtil.copyCollectionTo(allMenuList, SysMenuPerm.class);
-//        allMenuPermList = allMenuPermList.stream()
-//                .filter(m -> m.getMenuType() != SysMenuType.TYPE_DIRECTORY).collect(Collectors.toList());
-//        Map<Long, SysMenuPerm> allMenuPermMap =
-//                allMenuPermList.stream().collect(Collectors.toMap(SysMenuPerm::getMenuId, m -> m));
-//        List<Map<String, Object>> menuPermDataList = sysMenuService.getMenuAndPermListByRoleIds(roleIds);
-//        // 将查询出的菜单权限数据,挂接到完整的菜单树上。
-//        for (Map<String, Object> menuPermData : menuPermDataList) {
-//            Long menuId = (Long) menuPermData.get("menuId");
-//            SysMenuPerm menuPerm = allMenuPermMap.get(menuId);
-//            menuPerm.getPermUrlSet().add(menuPermData.get("url").toString());
-//        }
-//        // 根据菜单的上下级关联关系,将菜单列表还原为菜单树。
-//        List<TreeNode<SysMenuPerm, Long>> menuTreeList =
-//                TreeNode.build(allMenuPermList, SysMenuPerm::getMenuId, SysMenuPerm::getParentId, null);
-//        Set<String> permSet = new HashSet<>();
-//        String sessionId = TokenData.takeFromRequest().getSessionId();
-//        // 递归菜单树上每个菜单节点,将子菜单关联的所有permUrlSet,都合并到一级菜单的permUrlSet中。
-//        for (TreeNode<SysMenuPerm, Long> treeNode : menuTreeList) {
-//            this.buildAllSubMenuPermUrlSet(treeNode.getChildList(), treeNode.getData().getPermUrlSet());
-//            permSet.addAll(treeNode.getData().getPermUrlSet());
-//            this.putMenuPermToCache(sessionId, treeNode.getData());
-//        }
-//        return permSet;
-//    }
-//
-//    private void buildAllSubMenuPermUrlSet(List<TreeNode<SysMenuPerm, Long>> subList, Set<String> rootPermUrlSet) {
-//        for (TreeNode<SysMenuPerm, Long> treeNode : subList) {
-//            rootPermUrlSet.addAll(treeNode.getData().getPermUrlSet());
-//            if (CollUtil.isNotEmpty(treeNode.getChildList())) {
-//                this.buildAllSubMenuPermUrlSet(treeNode.getChildList(), rootPermUrlSet);
-//            }
-//        }
-//    }
-//
-//    private LoginApiService.OnlinePermData getAndCacheOnlineMenuPermData(Collection<SysMenu> allMenuList, List<SysMenu> onlineMenuList) {
-//        LoginApiService.OnlinePermData permData = new LoginApiService.OnlinePermData();
-//        if (CollUtil.isEmpty(onlineMenuList)) {
-//            return permData;
-//        }
-//        List<SysMenuPerm> allMenuPermList = MyModelUtil.copyCollectionTo(allMenuList, SysMenuPerm.class);
-//        List<SysMenuPerm> onlineMenuPermList = allMenuPermList.stream()
-//                .filter(m -> m.getOnlineFormId() != null
-//                        && m.getOnlineFlowEntryId() == null
-//                        && m.getMenuType().equals(SysMenuType.TYPE_MENU))
-//                .collect(Collectors.toList());
-//        Map<Long, List<SysMenuPerm>> onlineMenuPermMap =
-//                onlineMenuPermList.stream().collect(Collectors.groupingBy(SysMenuPerm::getOnlineFormId));
-//        this.buildOnlinePermData(onlineMenuList, onlineMenuPermMap, permData);
-//        // 这个非常非常重要,不能删除。因为在线票单的url前缀是可以配置的,那么表单字典接口的url也是动态。
-//        // 所以就不能把这个字典列表接口放到数据库的白名单表中。
-//        List<String> onlineWhitelistUrls = CollUtil.newArrayList(
-//                onlineProperties.getOperationUrlPrefix() + "/onlineOperation/listDict",
-//                onlineApiProperties.getUrlPrefix() + "/onlineForm/render",
-//                onlineApiProperties.getUrlPrefix() + "/onlineForm/view");
-//        String sessionId = TokenData.takeFromRequest().getSessionId();
-//        for (SysMenuPerm menuPerm : onlineMenuPermList) {
-//            menuPerm.getPermUrlSet().addAll(onlineWhitelistUrls);
-//            this.putMenuPermToCache(sessionId, menuPerm);
-//        }
-//        permData.permUrlSet.addAll(onlineWhitelistUrls);
-//        return permData;
-//    }
-//
-//    private void buildOnlinePermData(
-//            List<SysMenu> onlineMenuList, Map<Long, List<SysMenuPerm>> onlineMenuPermMap, LoginApiService.OnlinePermData permData) {
-//        List<SysMenu> viewMenuList = onlineMenuList.stream()
-//                .filter(m -> m.getOnlineMenuPermType() == SysOnlineMenuPermType.TYPE_VIEW)
-//                .collect(Collectors.toList());
-//        if (CollUtil.isNotEmpty(viewMenuList)) {
-//            Set<Long> formIdSet = viewMenuList.stream().map(SysMenu::getOnlineFormId).collect(Collectors.toSet());
-//            List<OnlineDatasource> datasourceList =
-//                    onlineDatasourceService.getOnlineDatasourceListByFormIds(formIdSet);
-//            for (OnlineDatasource datasource : datasourceList) {
-//                permData.permCodeSet.add(OnlineUtil.makeViewPermCode(datasource.getVariableName()));
-//                Set<String> permUrls = onlineProperties.getViewUrlList().stream()
-//                        .map(url -> url + datasource.getVariableName()).collect(Collectors.toSet());
-//                permData.permUrlSet.addAll(permUrls);
-//                List<SysMenuPerm> menuPermList = onlineMenuPermMap.get(datasource.getOnlineFormDatasource().getFormId());
-//                for (SysMenuPerm menuPerm : menuPermList) {
-//                    menuPerm.getPermUrlSet().addAll(permUrls);
-//                }
-//            }
-//        }
-//        List<SysMenu> editMenuList = onlineMenuList.stream()
-//                .filter(m -> m.getOnlineMenuPermType() == SysOnlineMenuPermType.TYPE_EDIT)
-//                .collect(Collectors.toList());
-//        if (CollUtil.isNotEmpty(editMenuList)) {
-//            Set<Long> formIdSet = editMenuList.stream().map(SysMenu::getOnlineFormId).collect(Collectors.toSet());
-//            List<OnlineDatasource> datasourceList =
-//                    onlineDatasourceService.getOnlineDatasourceListByFormIds(formIdSet);
-//            for (OnlineDatasource datasource : datasourceList) {
-//                permData.permCodeSet.add(OnlineUtil.makeEditPermCode(datasource.getVariableName()));
-//                Set<String> permUrls = onlineProperties.getEditUrlList().stream()
-//                        .map(url -> url + datasource.getVariableName()).collect(Collectors.toSet());
-//                permData.permUrlSet.addAll(permUrls);
-//                List<SysMenuPerm> menuPermList = onlineMenuPermMap.get(datasource.getOnlineFormDatasource().getFormId());
-//                for (SysMenuPerm menuPerm : menuPermList) {
-//                    menuPerm.getPermUrlSet().addAll(permUrls);
-//                }
-//            }
-//        }
-//    }
-//
-//    static class OnlinePermData {
-//        public final Set<String> permCodeSet = new HashSet<>();
-//        public final Set<String> permUrlSet = new HashSet<>();
-//    }
-//}

+ 72 - 0
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/api/SysUserApiService.java

@@ -0,0 +1,72 @@
+package com.ankaibei.workFlow.webadmin.api;
+
+import com.ankaibei.workFlow.webadmin.upms.model.SysMenu;
+import com.ankaibei.workFlow.webadmin.upms.model.constant.SysUserType;
+import com.ankaibei.workFlow.webadmin.upms.service.SysMenuService;
+import com.ankaibei.workFlow.webadmin.upms.service.SysPermCodeService;
+import com.ankaibei.workFlow.webadmin.upms.service.SysUserService;
+import com.ankaibei.workflow.api.SysUserApi;
+import com.ankaibei.workflow.vo.SysUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/foreign/admin/upms/user")
+public class SysUserApiService implements SysUserApi {
+
+    @Autowired
+    private SysUserService sysUserService;
+    @Autowired
+    private SysPermCodeService sysPermCodeService;
+    @Autowired
+    private SysMenuService sysMenuService;
+
+    @Override
+    @RequestMapping("/getUserInfoByUserName")
+    public SysUser getUserInfoByUserName(String userName) {
+        com.ankaibei.workFlow.webadmin.upms.model.SysUser user =
+                sysUserService.getSysUserByLoginName(userName);
+        if(ObjectUtils.isEmpty(user)){
+            return  null;
+        }
+        boolean isAdmin = user.getUserType() == SysUserType.TYPE_ADMIN;
+
+        List<String> allMenuList;
+        List<String> permCodeList;
+        if (isAdmin) {
+            allMenuList = sysMenuService.getAllListByOrder("showOrder")
+                    .stream()
+                    .map(SysMenu::getMenuName)
+                    .collect(Collectors.toList());
+            permCodeList = sysPermCodeService.getAllPermCodeList().stream().collect(Collectors.toList());
+        } else {
+            allMenuList = sysMenuService.getMenuListByUserId(Long.parseLong(user.getUserId()))
+                    .stream()
+                    .map(SysMenu::getMenuName)
+                    .collect(Collectors.toList());;
+            permCodeList = sysPermCodeService.getPermCodeListByUserId(user.getUserId()).stream().collect(Collectors.toList());
+        }
+
+        return  SysUser.builder()
+                .name(user.getShowName())
+                .deptName(null)
+                .deptId(user.getDeptId())
+                .description(null)
+                .email(user.getEmail())
+                .id(user.getUserId())
+                .headUrl(user.getHeadImageUrl())  // 头像地址
+                .password(user.getPassword())
+                .phone(user.getMobile())
+                .username(user.getLoginName())
+                .status(user.getUserStatus())
+                .userPermsList(permCodeList)
+                .isAdmin(isAdmin)
+                .build();
+    }
+
+}

+ 1 - 1
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/interceptor/AuthenticationInterceptor.java

@@ -51,7 +51,7 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
             throws Exception {
         String url = request.getRequestURI();
         log.info("拦截**请求路径:{}",url);
-        if(url.startsWith("/api/foreign") || url.startsWith("/api/error")){
+        if(url.startsWith("/api/foreign")){
             return true;
         }
         String token = this.getTokenFromRequest(request);

+ 5 - 3
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/upms/controller/LoginController.java

@@ -191,7 +191,7 @@ public class LoginController {
             permCodeList = sysPermCodeService.getAllPermCodeList();
         } else {
             menuList = sysMenuService.getMenuListByUserId(tokenData.getUserId());
-            permCodeList = sysPermCodeService.getPermCodeListByUserId(tokenData.getUserId());
+            permCodeList = sysPermCodeService.getPermCodeListByUserId(tokenData.getUserId().toString());
         }
         menuList = menuList.stream().filter(m -> m.getMenuType() <= SysMenuType.TYPE_MENU).collect(Collectors.toList());
         jsonData.put("menuList", menuList);
@@ -293,9 +293,11 @@ public class LoginController {
     private JSONObject buildLoginData(SysUser user) {
         int deviceType = MyCommonUtil.getDeviceType();
         boolean isAdmin = user.getUserType() == SysUserType.TYPE_ADMIN;
-        Map<String, Object> claims = new HashMap<>(3);
+        Map<String, Object> claims = new HashMap<>(4);
         String sessionId = user.getLoginName() + "_" + deviceType + "_" + MyCommonUtil.generateUuid();
         claims.put("sessionId", sessionId);
+        claims.put("userId", user.getUserId());
+        claims.put("username", user.getLoginName());
         String token = JwtUtil.generateToken(claims, appConfig.getExpiration(), appConfig.getTokenSigningKey());
         JSONObject jsonData = new JSONObject();
         jsonData.put(TokenData.REQUEST_ATTRIBUTE_NAME, token);
@@ -315,7 +317,7 @@ public class LoginController {
             permCodeList = sysPermCodeService.getAllPermCodeList();
         } else {
             allMenuList = sysMenuService.getMenuListByUserId(Long.parseLong(user.getUserId()));
-            permCodeList = sysPermCodeService.getPermCodeListByUserId(Long.parseLong(user.getUserId()));
+            permCodeList = sysPermCodeService.getPermCodeListByUserId(user.getUserId());
         }
         List<SysMenu> menuList = allMenuList.stream()
                 .filter(m -> m.getMenuType() <= SysMenuType.TYPE_MENU).collect(Collectors.toList());

+ 1 - 1
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/upms/dao/SysPermCodeMapper.java

@@ -21,7 +21,7 @@ public interface SysPermCodeMapper extends BaseDaoMapper<SysPermCode> {
      * @param userId 用户Id。
      * @return 该用户的权限字列表。
      */
-    List<String> getPermCodeListByUserId(@Param("userId") Long userId);
+    List<String> getPermCodeListByUserId(@Param("userId") String userId);
 
     /**
      * 查询权限字的用户列表。同时返回详细的分配路径。

+ 1 - 1
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/upms/service/SysPermCodeService.java

@@ -20,7 +20,7 @@ public interface SysPermCodeService extends IBaseService<SysPermCode, Long> {
      * @param userId 用户主键Id。
      * @return 用户关联的权限字列表。
      */
-    Collection<String> getPermCodeListByUserId(Long userId);
+    Collection<String> getPermCodeListByUserId(String userId);
 
     /**
      * 获取所有权限字数据列表,已去重。

+ 1 - 1
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/upms/service/impl/SysPermCodeServiceImpl.java

@@ -63,7 +63,7 @@ public class SysPermCodeServiceImpl extends BaseService<SysPermCode, Long> imple
      * @return 用户关联的权限字列表。
      */
     @Override
-    public Collection<String> getPermCodeListByUserId(Long userId) {
+    public Collection<String> getPermCodeListByUserId(String userId) {
         List<String> permCodeList = sysPermCodeMapper.getPermCodeListByUserId(userId);
         return new HashSet<>(permCodeList);
     }