IntelligentRecognition/ah-jjsp-service/.svn/pristine/91/911189819f593be02cbee433b01...

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;
}
}