123 lines
4.8 KiB
Plaintext
123 lines
4.8 KiB
Plaintext
package com.securityControl.auth.controller;
|
|
|
|
import com.securityControl.auth.igwUtils.EnDecryptUtil;
|
|
import com.securityControl.auth.igwUtils.IgwSingleSignOn;
|
|
import com.securityControl.auth.igwUtils.InterfaceEnv;
|
|
import com.securityControl.auth.igwUtils.SerUtil;
|
|
import com.securityControl.auth.pojo.UnionUserCodeRes;
|
|
import com.securityControl.auth.pojo.UserInfo;
|
|
import com.securityControl.auth.service.SysRecordLogService;
|
|
import com.securityControl.common.core.constant.SecurityConstants;
|
|
import com.securityControl.common.core.domain.R;
|
|
import com.securityControl.common.core.enums.UserStatus;
|
|
import com.securityControl.common.core.exception.ServiceException;
|
|
import com.securityControl.common.core.utils.StringUtils;
|
|
import com.securityControl.common.security.service.TokenService;
|
|
import com.securityControl.system.api.RemoteUserService;
|
|
import com.securityControl.system.api.domain.SysUser;
|
|
import com.securityControl.system.api.domain.decision.SysMenu;
|
|
import com.securityControl.system.api.model.LoginUser;
|
|
import io.swagger.annotations.Api;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
import java.util.List;
|
|
|
|
/**
|
|
* @author cw chen
|
|
* @description 集成i国网登录
|
|
* @date 2023-06-16 15:40
|
|
*/
|
|
@Api(value = "集成i国网登录")
|
|
@RestController
|
|
@Slf4j
|
|
public class IgwLogin {
|
|
|
|
/**
|
|
* --> isc app id
|
|
*/
|
|
private static String ISC_APP_ID = "424ffb874241409c8a7d0350f103513f";
|
|
/**
|
|
* signKey
|
|
*/
|
|
private static String SM2_PRIVATE_KEY = "00D515EE353393AD2CE9BF0AD17A5CC76E90B335143CD3ABF578718DD13369DACD";
|
|
/**
|
|
* --> isc secret
|
|
*/
|
|
private static String SM4_KEY = "f1bc301b044244b495973e156f342fbd";
|
|
|
|
@Autowired
|
|
private RemoteUserService remoteUserService;
|
|
|
|
@Autowired
|
|
private SysRecordLogService recordLogService;
|
|
|
|
@Autowired
|
|
private TokenService tokenService;
|
|
|
|
/**
|
|
* @return com.securityControl.common.core.web.domain.AjaxResult
|
|
* @author cw chen
|
|
* @description 根据isc账号登录
|
|
* @Param account
|
|
* @date 2023-06-19 10:30
|
|
*/
|
|
@PostMapping("loginByAccount")
|
|
public R<?> loginByAccount(String param) {
|
|
if (StringUtils.isBlank(param)) {
|
|
throw new ServiceException("参数code不能为空", 201);
|
|
}
|
|
String res = null;
|
|
try {
|
|
res = EnDecryptUtil.transferDecrypt(param, SM4_KEY, SM2_PRIVATE_KEY);
|
|
} catch (Exception e) {
|
|
throw new ServiceException("用户信息解密失败",500);
|
|
}
|
|
UnionUserCodeRes unionUserCodeRes = SerUtil.fromJson(res, UnionUserCodeRes.class);
|
|
// 调用省侧的ISC对外服务完成用户获取
|
|
UserInfo userInfo = IgwSingleSignOn.provinceApplicationGetUserInfo(unionUserCodeRes.getCode(), ISC_APP_ID, SM4_KEY, SM2_PRIVATE_KEY, InterfaceEnv.UAT);
|
|
if(userInfo == null){
|
|
throw new ServiceException("用户信息认证失败",500);
|
|
}
|
|
String account = userInfo.getAccount();
|
|
LoginUser loginUser = login(account,null);
|
|
// 获取登录token
|
|
return R.ok(tokenService.createToken(loginUser),"登录成功");
|
|
}
|
|
|
|
/**
|
|
* 登录
|
|
*/
|
|
public LoginUser login(String account, List<SysMenu> list) {
|
|
if (StringUtils.isBlank(account)) {
|
|
throw new ServiceException("登录账号不能为空", 201);
|
|
}
|
|
// 查询用户信息
|
|
R<LoginUser> userResult = remoteUserService.getUserInfo(account, SecurityConstants.INNER);
|
|
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
|
|
throw new ServiceException("登录账号:" + account + " 不存在", 201);
|
|
}
|
|
if (R.FAIL == userResult.getCode()) {
|
|
throw new ServiceException(userResult.getMsg());
|
|
}
|
|
LoginUser userInfo = userResult.getData();
|
|
SysUser user = userResult.getData().getSysUser();
|
|
if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
|
|
throw new ServiceException("对不起,您的账号:" + account + " 已被删除", 201);
|
|
}
|
|
if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
|
|
throw new ServiceException("对不起,您的账号:" + account + " 已锁定", 201);
|
|
}
|
|
if (list == null) {
|
|
R<List<SysMenu>> menu = remoteUserService.getAllMenuList(user.getUserId() + "", SecurityConstants.INNER);
|
|
list = menu.getData();
|
|
}
|
|
R<List<SysMenu>> menu = remoteUserService.getAllMenuList(user.getUserId() + "", SecurityConstants.INNER);
|
|
userInfo.getSysUser().setMenus(list);
|
|
recordLogService.recordLogininfor(account, "用户登录", "系统登录");
|
|
return userInfo;
|
|
}
|
|
}
|