From 4052fbfdc0c1fa5894bd4db2ff8968c6f3c4a53d Mon Sep 17 00:00:00 2001 From: hujunbo <9094908@qq.com> Date: Tue, 20 Sep 2022 20:05:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=8D=95=E7=82=B9=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysLoginController.java | 20 +++- .../src/main/resources/application-druid.yml | 5 + ruoyi-biemo/pom.xml | 9 +- .../business/controller/ReportController.java | 6 + .../biemo/business/service/ReportService.java | 110 +++++++++++++++++- .../web/service/SysLoginService.java | 16 +-- .../web/service/SysPermissionService.java | 28 ++++- .../ruoyi/system/service/ISysMenuService.java | 35 +++--- .../service/impl/SysMenuServiceImpl.java | 70 ++++++----- ruoyi-ui/src/api/login.js | 10 +- ruoyi-ui/src/main.js | 33 ++++-- 11 files changed, 264 insertions(+), 78 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index d959a17..a1af346 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -2,6 +2,10 @@ package com.ruoyi.web.controller.system; import java.util.List; import java.util.Set; + +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.framework.web.service.TokenService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -19,7 +23,7 @@ import com.ruoyi.system.service.ISysMenuService; /** * 登录验证 - * + * * @author ruoyi */ @RestController @@ -34,9 +38,12 @@ public class SysLoginController @Autowired private SysPermissionService permissionService; + @Autowired + private TokenService tokenService; + /** * 登录方法 - * + * * @param loginBody 登录信息 * @return 结果 */ @@ -53,7 +60,7 @@ public class SysLoginController /** * 获取用户信息 - * + * * @return 用户信息 */ @GetMapping("getInfo") @@ -73,14 +80,15 @@ public class SysLoginController /** * 获取路由信息 - * + * * @return 路由信息 */ @GetMapping("getRouters") public AjaxResult getRouters() { - Long userId = SecurityUtils.getUserId(); - List menus = menuService.selectMenuTreeByUserId(userId); + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + SysUser user = loginUser.getUser(); + List menus = menuService.selectMenuTreeByUserId(user); return AjaxResult.success(menuService.buildMenus(menus)); } } diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index 4c726dd..3716a2a 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -76,3 +76,8 @@ elasticsearch: maxConnectNum: 100 maxConnectPerRoute: 100 +sso: + apiUrl: http://test.vsp.cqooc.com/open/api/v2/oauth/token?appId={APPID}&signature={SIGNATURE}&ticket={TICKET} + password: admin123 + secretKey: 4ce36bf549d64d44b6cbc48e926abb05 + appId: cb00a3e26b963b25e28cae6e046f1190 diff --git a/ruoyi-biemo/pom.xml b/ruoyi-biemo/pom.xml index e22e4d3..b455f69 100644 --- a/ruoyi-biemo/pom.xml +++ b/ruoyi-biemo/pom.xml @@ -21,10 +21,15 @@ - + + + com.ruoyi + ruoyi-system + + com.ruoyi - ruoyi-common + ruoyi-framework org.springframework.boot diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/controller/ReportController.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/controller/ReportController.java index b26df71..d07abfe 100644 --- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/controller/ReportController.java +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/controller/ReportController.java @@ -89,4 +89,10 @@ public class ReportController return AjaxResult.success(); } + + @RequestMapping("/ticket2token") + public AjaxResult ticket2token(String ticket){ + return AjaxResult.success("查询成功",reportService.ticket2token(ticket)); + } + } diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/service/ReportService.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/service/ReportService.java index 034c7d8..e5f082d 100644 --- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/service/ReportService.java +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/service/ReportService.java @@ -1,5 +1,7 @@ package com.ruoyi.biemo.business.service; +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.util.StringUtil; import com.ruoyi.biemo.business.domain.Category; import com.ruoyi.biemo.business.domain.DocInfo; @@ -13,20 +15,32 @@ import com.ruoyi.biemo.elasticsearch.util.EsService; import com.ruoyi.biemo.mongodb.utils.CriteriaAndWrapper; import com.ruoyi.biemo.mongodb.utils.MongoHelper; import com.ruoyi.biemo.utils.MyObjects; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.sign.Md5Utils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.framework.web.service.SysLoginService; +import com.ruoyi.system.service.ISysLogininforService; +import com.ruoyi.system.service.ISysUserService; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.sort.SortOrder; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationEvent; import org.springframework.context.event.EventListener; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; import java.awt.image.ReplicateScaleFilter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; @@ -42,6 +56,12 @@ public class ReportService extends EsService { @Autowired private MongoHelper mongoHelper; + @Autowired + private ISysUserService userService; + + @Autowired + private SysLoginService loginService; + @Autowired private ApplicationContext applicationContext; @@ -162,4 +182,86 @@ public class ReportService extends EsService { List ids = saveEvent.getIds(); deleteBatch(ids); } + + @Value("${sso.password}") + private String password = "admin123"; + + @Value("${sso.apiUrl}") + private String apiUrl = "http://test.vsp.cqooc.com/open/api/v2/oauth/token?appId={APPID}&signature={SIGNATURE}&ticket={TICKET}"; + @Value("${sso.appId}") + private String appId = "cb00a3e26b963b25e28cae6e046f1190"; + @Value("${sso.secretKey}") + private String secretKey = "4ce36bf549d64d44b6cbc48e926abb05"; + @Autowired + private RedisCache redisCache; + + public String ticket2token(String ticket) { + if(StringUtils.isNotBlank(ticket)){ + String sign = Md5Utils.hash(appId+secretKey+ticket).toUpperCase(); + Map map = new HashMap<>(); + map.put("APPID", appId); + map.put("SIGNATURE", sign); + map.put("TICKET",ticket); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity entity = restTemplate.getForEntity(apiUrl, Map.class, map); + Map loginMap = entity.getBody(); + String userName = ""; + String nickName = ""; + if (loginMap != null && (Integer) loginMap.get("code") == 0) { + JSONObject jsonObject = (JSONObject) JSONObject.toJSON(loginMap); + JSONObject data = jsonObject.getObject("data",JSONObject.class); + userName = data.getString("userName"); + String openId = data.getString("openId"); + String accessToken = data.getString("accessToken"); + Long createTime = data.getLong("createTime"); + Long expiresTime = data.getLong("expiresTime"); + Long expiresLong = expiresTime-createTime; + redisCache.setCacheObject(ticket, accessToken, expiresLong.intValue(), TimeUnit.MILLISECONDS); + //用户名不存在就新建 + SysUser sysUser = new SysUser(); + if(UserConstants.UNIQUE.equals(userService.checkUserNameUnique(userName))){ + sysUser.setUserName(userName); + if(StringUtils.isNotBlank(nickName)){ + sysUser.setNickName(nickName); + }else{ + sysUser.setNickName(userName); + } + sysUser.setRemark("平台用户"); + sysUser.setRoleIds(new Long[]{1L}); + sysUser.setCreateBy("xitong"); + sysUser.setCreateTime(new Date()); + sysUser.setSex("1"); + sysUser.setDelFlag("0"); + sysUser.setStatus("0"); + sysUser.setDeptId(100l); + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + userService.insertUser(sysUser); + }else{ + sysUser = userService.selectUserByUserName(userName); + if(!"0".equals(sysUser.getDelFlag())){ + sysUser.setDelFlag("0"); + sysUser.setRoleIds(new Long[]{1L}); + userService.updateUser(sysUser); + } + } + return loginService.login(sysUser.getUserName(),password,null, IdUtils.fastSimpleUUID()); + } + } + return null; + } + + /** + * "success": true, + * "code": 0, + * "total": 0, + * "data": { + * "openId": "fb4078687af9ac748c00318d53a36c43", + * "userName": "测试用户", + * "accessToken": "61ynp2w3vxvcdhf730h7cilelr51yljgofkp0uxqoji7hzps9sn0hlfat7ys3cbm", + * "createTime": 1654159120374, + * "expiresTime": 1654245520374, + * "createTimeDisplay": "2022-06-02 16:38:40", + * "expiresTimeDisplay": "2022-06-03 16:38:40" + * } + */ } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index a9383e2..7b01899 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -28,7 +28,7 @@ import com.ruoyi.system.service.ISysUserService; /** * 登录校验方法 - * + * * @author ruoyi */ @Component @@ -42,7 +42,7 @@ public class SysLoginService @Autowired private RedisCache redisCache; - + @Autowired private ISysUserService userService; @@ -51,7 +51,7 @@ public class SysLoginService /** * 登录验证 - * + * * @param username 用户名 * @param password 密码 * @param code 验证码 @@ -62,10 +62,10 @@ public class SysLoginService { boolean captchaOnOff = configService.selectCaptchaOnOff(); // 验证码开关 - if (captchaOnOff) - { - validateCaptcha(username, code, uuid); - } +// if (captchaOnOff) +// { +// validateCaptcha(username, code, uuid); +// } // 用户验证 Authentication authentication = null; try @@ -96,7 +96,7 @@ public class SysLoginService /** * 校验验证码 - * + * * @param username 用户名 * @param code 验证码 * @param uuid 唯一标识 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java index feb8038..593e694 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java @@ -1,7 +1,11 @@ package com.ruoyi.framework.web.service; +import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.Set; + +import com.ruoyi.common.core.domain.entity.SysRole; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ruoyi.common.core.domain.entity.SysUser; @@ -10,7 +14,7 @@ import com.ruoyi.system.service.ISysRoleService; /** * 用户权限处理 - * + * * @author ruoyi */ @Component @@ -24,7 +28,7 @@ public class SysPermissionService /** * 获取角色数据权限 - * + * * @param user 用户信息 * @return 角色权限信息 */ @@ -32,7 +36,7 @@ public class SysPermissionService { Set roles = new HashSet(); // 管理员拥有所有权限 - if (user.isAdmin()) + if (user.isAdmin()||hasRole(user.getRoles())) { roles.add("admin"); } @@ -45,7 +49,7 @@ public class SysPermissionService /** * 获取菜单数据权限 - * + * * @param user 用户信息 * @return 菜单权限信息 */ @@ -53,7 +57,8 @@ public class SysPermissionService { Set perms = new HashSet(); // 管理员拥有所有权限 - if (user.isAdmin()) + + if (user.isAdmin()||hasRole(user.getRoles())) { perms.add("*:*:*"); } @@ -63,4 +68,17 @@ public class SysPermissionService } return perms; } + + private Boolean hasRole(List roleIds){ + boolean hasRole = false; + if(roleIds!=null&&roleIds.size()>0){ + for(int i=0;i selectMenuTreeByUserId(Long userId); + public List selectMenuTreeByUserId(SysUser user); /** * 根据角色ID查询菜单树信息 - * + * * @param roleId 角色ID * @return 选中菜单列表 */ @@ -56,7 +57,7 @@ public interface ISysMenuService /** * 构建前端路由所需要的菜单 - * + * * @param menus 菜单列表 * @return 路由列表 */ @@ -64,7 +65,7 @@ public interface ISysMenuService /** * 构建前端所需要树结构 - * + * * @param menus 菜单列表 * @return 树结构列表 */ @@ -72,7 +73,7 @@ public interface ISysMenuService /** * 构建前端所需要下拉树结构 - * + * * @param menus 菜单列表 * @return 下拉树结构列表 */ @@ -80,7 +81,7 @@ public interface ISysMenuService /** * 根据菜单ID查询信息 - * + * * @param menuId 菜单ID * @return 菜单信息 */ @@ -88,7 +89,7 @@ public interface ISysMenuService /** * 是否存在菜单子节点 - * + * * @param menuId 菜单ID * @return 结果 true 存在 false 不存在 */ @@ -96,7 +97,7 @@ public interface ISysMenuService /** * 查询菜单是否存在角色 - * + * * @param menuId 菜单ID * @return 结果 true 存在 false 不存在 */ @@ -104,7 +105,7 @@ public interface ISysMenuService /** * 新增保存菜单信息 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -112,7 +113,7 @@ public interface ISysMenuService /** * 修改保存菜单信息 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -120,7 +121,7 @@ public interface ISysMenuService /** * 删除菜单管理信息 - * + * * @param menuId 菜单ID * @return 结果 */ @@ -128,7 +129,7 @@ public interface ISysMenuService /** * 校验菜单名称是否唯一 - * + * * @param menu 菜单信息 * @return 结果 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index b2ac3f0..3529d86 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -27,7 +27,7 @@ import com.ruoyi.system.service.ISysMenuService; /** * 菜单 业务层处理 - * + * * @author ruoyi */ @Service @@ -46,7 +46,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据用户查询系统菜单列表 - * + * * @param userId 用户ID * @return 菜单列表 */ @@ -58,7 +58,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 查询系统菜单列表 - * + * * @param menu 菜单信息 * @return 菜单列表 */ @@ -81,7 +81,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据用户ID查询权限 - * + * * @param userId 用户ID * @return 权限列表 */ @@ -102,28 +102,28 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据用户ID查询菜单 - * + * * @param userId 用户名称 * @return 菜单列表 */ @Override - public List selectMenuTreeByUserId(Long userId) + public List selectMenuTreeByUserId(SysUser user) { List menus = null; - if (SecurityUtils.isAdmin(userId)) + if (SecurityUtils.isAdmin(user.getUserId())||hasRole(user.getRoles())) { menus = menuMapper.selectMenuTreeAll(); } else { - menus = menuMapper.selectMenuTreeByUserId(userId); + menus = menuMapper.selectMenuTreeByUserId(user.getUserId()); } return getChildPerms(menus, 0); } /** * 根据角色ID查询菜单树信息 - * + * * @param roleId 角色ID * @return 选中菜单列表 */ @@ -136,7 +136,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 构建前端路由所需要的菜单 - * + * * @param menus 菜单列表 * @return 路由列表 */ @@ -194,7 +194,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 构建前端所需要树结构 - * + * * @param menus 菜单列表 * @return 树结构列表 */ @@ -226,7 +226,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 构建前端所需要下拉树结构 - * + * * @param menus 菜单列表 * @return 下拉树结构列表 */ @@ -239,7 +239,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据菜单ID查询信息 - * + * * @param menuId 菜单ID * @return 菜单信息 */ @@ -251,7 +251,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 是否存在菜单子节点 - * + * * @param menuId 菜单ID * @return 结果 */ @@ -264,7 +264,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 查询菜单使用数量 - * + * * @param menuId 菜单ID * @return 结果 */ @@ -277,7 +277,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 新增保存菜单信息 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -289,7 +289,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 修改保存菜单信息 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -301,7 +301,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 删除菜单管理信息 - * + * * @param menuId 菜单ID * @return 结果 */ @@ -313,7 +313,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 校验菜单名称是否唯一 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -331,7 +331,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 获取路由名称 - * + * * @param menu 菜单信息 * @return 路由名称 */ @@ -348,7 +348,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 获取路由地址 - * + * * @param menu 菜单信息 * @return 路由地址 */ @@ -376,7 +376,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 获取组件信息 - * + * * @param menu 菜单信息 * @return 组件信息 */ @@ -400,7 +400,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 是否为菜单内部跳转 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -412,7 +412,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 是否为内链组件 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -423,7 +423,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 是否为parent_view组件 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -434,7 +434,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据父节点的ID获取所有子节点 - * + * * @param list 分类表 * @param parentId 传入的父节点ID * @return String @@ -457,7 +457,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 递归列表 - * + * * @param list * @param t */ @@ -503,7 +503,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 内链域名特殊字符替换 - * + * * @return */ public String innerLinkReplaceEach(String path) @@ -511,4 +511,18 @@ public class SysMenuServiceImpl implements ISysMenuService return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS }, new String[] { "", "" }); } + + private Boolean hasRole(List roleIds){ + boolean hasRole = false; + if(roleIds!=null&&roleIds.size()>0){ + for(int i=0;i h(App) -}) +import {setToken} from '@/utils/auth'; +import {ticket2token} from '@/api/login' +import {getQueryObject} from '@/utils/index'; +let ticket = getQueryObject().ticket; +if(ticket){ + ticket2token({ticket:ticket}).then(res =>{ + let sysToken = res.data; + setToken(sysToken); + store.commit('SET_TOKEN',sysToken); + initVue(); + }) +}else{ + initVue(); +} +function initVue(){ + new Vue({ + el: '#app', + i18n, + router, + store, + render: h => h(App) + }) +} + + +