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 list) { if (StringUtils.isBlank(account)) { throw new ServiceException("登录账号不能为空", 201); } // 查询用户信息 R 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> menu = remoteUserService.getAllMenuList(user.getUserId() + "", SecurityConstants.INNER); list = menu.getData(); } R> menu = remoteUserService.getAllMenuList(user.getUserId() + "", SecurityConstants.INNER); userInfo.getSysUser().setMenus(list); recordLogService.recordLogininfor(account, "用户登录", "系统登录"); return userInfo; } }