diff --git a/bonus-auth/src/main/java/com/bonus/auth/controller/TokenController.java b/bonus-auth/src/main/java/com/bonus/auth/controller/TokenController.java index 9d3b3dc..bcc3eff 100644 --- a/bonus-auth/src/main/java/com/bonus/auth/controller/TokenController.java +++ b/bonus-auth/src/main/java/com/bonus/auth/controller/TokenController.java @@ -1,5 +1,6 @@ package com.bonus.auth.controller; +import com.alibaba.fastjson.JSONObject; import com.bonus.auth.config.LoginType; import com.bonus.auth.factory.LoginStrategyFactory; import com.bonus.auth.form.LoginBody; @@ -8,6 +9,7 @@ import com.bonus.auth.service.*; import com.bonus.common.core.constant.CacheConstants; import com.bonus.common.core.constant.SecurityConstants; import com.bonus.common.core.domain.R; +import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.JwtUtils; import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.web.domain.AjaxResult; @@ -23,14 +25,19 @@ import com.bonus.system.api.domain.SysUser; import com.bonus.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; import java.util.Set; /** @@ -71,6 +78,12 @@ public class TokenController { @Resource private RemoteConfigService configService; + @Value("${iws.appId}") + private String iwsAppId; + + @Value("${iws.url}") + private String iwsUrl; + @PostMapping("isAdmin") public R isAdmin(@RequestBody LoginBody form) { if (!config.isAdmin()) { @@ -139,6 +152,75 @@ public class TokenController { } + /** + * i皖送登录 + * @param req + * @return + */ + @PostMapping("iwsLogin") + public R iwsLogin(@RequestBody HttpServletRequest req) { + //获取i皖送传过来的票据 + String ticket = req.getParameter("ticket"); + log.info("ticket=" + ticket); + if (StringUtils.isNotEmpty(ticket)) { + //获取系统标识,这里可以放到配置文件中 + //String appId = "ec3fce308fcc407a79e1f09938ba16ab"; + //调用i皖送平台进行认证获取用户信息 + //String url = "http://sgwpdm.ah.sgcc.com.cn/iws/workplat/auth/auth-by-ticket?ticket={ticket}&appId={appId}"; + RestTemplate restTemplate = new RestTemplate(); + Map paramMap = new HashMap<>(); + paramMap.put("ticket", ticket); + paramMap.put("appId", iwsAppId); + ResponseEntity authResponse = restTemplate.getForEntity(iwsUrl, String.class, paramMap); + log.info("authResponse:" + authResponse.toString()); + if ("200".equals(authResponse.getStatusCode())){ + // 根据ResponseEntity responseEntity对象,获取body部分,body为json格式字符串 + String content = authResponse.getBody(); + // 将json字符串转化为json对象 + JSONObject json = JSONObject.parseObject(content); + // 取出data部分对象 + JSONObject data = json.getJSONObject("data"); + //根据用户信息来生成token,并保存,不过目前来说因为不知道返回的内容,这里先用一个固定数据来生成token,后期修改 + LoginUser loginUser = new LoginUser(); + SysUser sysUser = new SysUser(); + sysUser.setUserName(data.get("name").toString()); + loginUser.setSysUser(sysUser); + //通过用户名获取人员信息 + R userResult = remoteUserService.getUserInfo(sysUser.getUserName(), SecurityConstants.INNER); + if (userResult.getData() == null || R.FAIL == userResult.getCode()) { + log.info("登录用户不存在,进行创建----"); + RegisterBody registerBody = new RegisterBody(); + registerBody.setUsername(sysUser.getUserName()); + registerBody.setNickName(data.get("userName").toString()); + registerBody.setMobile(data.get("mobile").toString()); + sysUser.setPassword(SecurityConstants.PASSWORD); + //新用户注册 + try { + sysLoginService.register(registerBody); + //查询用户信息 + userResult = remoteUserService.getUserInfo(sysUser.getUserName(), SecurityConstants.INNER); + loginUser = userResult.getData(); + sysUser = loginUser.getSysUser(); + //初始化一个角色 + Long[] roleIds = new Long[5]; + // 将数组的第一个元素赋值为 2 + roleIds[0] = 2L; + remoteUserService.insertAuthRole(sysUser.getUserId(),roleIds,SecurityConstants.INNER); + }catch (Exception e){ + throw new ServiceException("登录失败,请稍后重试"); + } + }else { + loginUser = userResult.getData(); + sysUser = loginUser.getSysUser(); + } + sysUser.setUserId(sysUser.getUserId()); + logService.saveLogin(sysUser.getUserName(), "登录", "登录成功", null, "成功"); + return R.ok(tokenService.createToken(loginUser)); + } + } + return R.fail("登录失败!"); + } + /** * 获取手机验证码 * diff --git a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/constant/SecurityConstants.java b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/constant/SecurityConstants.java index 7bc2e40..40bd224 100644 --- a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/constant/SecurityConstants.java +++ b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/constant/SecurityConstants.java @@ -46,4 +46,9 @@ public class SecurityConstants * 角色权限 */ public static final String ROLE_PERMISSION = "role_permission"; + + /** + * i皖送初始化密码 + */ + public static final String PASSWORD = "Iws@20241219"; }