完成单点对接

master
hujunbo 3 years ago
parent 77de0f99b7
commit 4052fbfdc0

@ -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;
@ -34,6 +38,9 @@ public class SysLoginController
@Autowired
private SysPermissionService permissionService;
@Autowired
private TokenService tokenService;
/**
*
*
@ -79,8 +86,9 @@ public class SysLoginController
@GetMapping("getRouters")
public AjaxResult getRouters()
{
Long userId = SecurityUtils.getUserId();
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
SysUser user = loginUser.getUser();
List<SysMenu> menus = menuService.selectMenuTreeByUserId(user);
return AjaxResult.success(menuService.buildMenus(menus));
}
}

@ -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

@ -21,10 +21,15 @@
</properties>
<dependencies>
<!-- 通用工具-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-system</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
<artifactId>ruoyi-framework</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>

@ -89,4 +89,10 @@ public class ReportController
return AjaxResult.success();
}
@RequestMapping("/ticket2token")
public AjaxResult ticket2token(String ticket){
return AjaxResult.success("查询成功",reportService.ticket2token(ticket));
}
}

@ -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<Report> {
@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<Report> {
List<String> 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<String, Object> map = new HashMap<>();
map.put("APPID", appId);
map.put("SIGNATURE", sign);
map.put("TICKET",ticket);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Map> 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"
* }
*/
}

@ -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

@ -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;
@ -32,7 +36,7 @@ public class SysPermissionService
{
Set<String> roles = new HashSet<String>();
// 管理员拥有所有权限
if (user.isAdmin())
if (user.isAdmin()||hasRole(user.getRoles()))
{
roles.add("admin");
}
@ -53,7 +57,8 @@ public class SysPermissionService
{
Set<String> perms = new HashSet<String>();
// 管理员拥有所有权限
if (user.isAdmin())
if (user.isAdmin()||hasRole(user.getRoles()))
{
perms.add("*:*:*");
}
@ -63,4 +68,17 @@ public class SysPermissionService
}
return perms;
}
private Boolean hasRole(List<SysRole> roleIds){
boolean hasRole = false;
if(roleIds!=null&&roleIds.size()>0){
for(int i=0;i<roleIds.size();i++){
if(roleIds.get(i).getRoleId()==1){
hasRole = true;
break;
}
}
}
return hasRole;
}
}

@ -4,6 +4,7 @@ import java.util.List;
import java.util.Set;
import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.domain.vo.RouterVo;
/**
@ -44,7 +45,7 @@ public interface ISysMenuService
* @param userId ID
* @return
*/
public List<SysMenu> selectMenuTreeByUserId(Long userId);
public List<SysMenu> selectMenuTreeByUserId(SysUser user);
/**
* ID

@ -107,16 +107,16 @@ public class SysMenuServiceImpl implements ISysMenuService
* @return
*/
@Override
public List<SysMenu> selectMenuTreeByUserId(Long userId)
public List<SysMenu> selectMenuTreeByUserId(SysUser user)
{
List<SysMenu> 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);
}
@ -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<SysRole> roleIds){
boolean hasRole = false;
if(roleIds!=null&&roleIds.size()>0){
for(int i=0;i<roleIds.size();i++){
if(roleIds.get(i).getRoleId()==1){
hasRole = true;
break;
}
}
}
return hasRole;
}
}

@ -57,3 +57,11 @@ export function getCodeImg() {
timeout: 20000
})
}
export function ticket2token(query){
return request({
url: '/makesoft/report/ticket2token',
method: 'get',
params: query
})
}

@ -95,10 +95,29 @@ Vue.use(Element, {
Vue.config.productionTip = false
new Vue({
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)
})
})
}

Loading…
Cancel
Save