From 8e91de1d1b1f49ecc1d86756d308a875c401a9c5 Mon Sep 17 00:00:00 2001 From: 15856 <15856818120@163.com> Date: Wed, 25 Dec 2024 11:02:21 +0800 Subject: [PATCH] =?UTF-8?q?i=E7=9A=96=E9=80=81=E7=BB=9F=E4=B8=80=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3=E7=BC=96=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/controller/TokenController.java | 83 +++++--------- .../java/com/bonus/auth/form/LoginBody.java | 9 ++ .../bonus/auth/service/SysLoginService.java | 102 ++++++++++++++++++ 3 files changed, 135 insertions(+), 59 deletions(-) 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 038f962..5ef880e 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 @@ -78,11 +78,17 @@ public class TokenController { @Resource private RemoteConfigService configService; - @Value("${third-party-login.iws.appId}") - private String iwsAppId; + @Value("${third-party-login.iws.webAppId}") + private String iwsWebAppId; - @Value("${third-party-login.iws.url}") - private String iwsUrl; + @Value("${third-party-login.iws.webUrl}") + private String iwsWebUrl; + + @Value("${third-party-login.iws.h5AppId}") + private String iwsH5AppId; + + @Value("${third-party-login.iws.h5Url}") + private String iwsH5Url; @PostMapping("isAdmin") public R isAdmin(@RequestBody LoginBody form) { @@ -154,68 +160,27 @@ public class TokenController { /** * i皖送登录 - * @param req * @return */ @PostMapping("iwsLogin") - public R iwsLogin(@RequestBody HttpServletRequest req) { + public R iwsLogin(@RequestBody LoginBody form) { //获取i皖送传过来的票据 - String ticket = req.getParameter("ticket"); + String ticket = form.getTicket(); 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"); - LoginUser loginUser = new LoginUser(); - SysUser sysUser = new SysUser(); - sysUser.setUserName(data.get("userName").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("name").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(); - } - logService.saveLogin(sysUser.getUserName(), "登录", "登录成功", null, "成功"); - //生成系统token - return R.ok(tokenService.createToken(loginUser)); + LoginUser loginUser = new LoginUser(); + SysUser sysUser = new SysUser(); + if (form.getSysType()!=null && "1".equals(form.getSysType())){ + sysLoginService.iwsH5Login(ticket,iwsH5AppId,iwsH5Url,loginUser,sysUser); + } else if (form.getSysType()!=null && "0".equals(form.getSysType())) { + sysLoginService.iwsWebLogin(ticket,iwsWebAppId,iwsWebUrl,loginUser,sysUser); + }else { + throw new ServiceException("登录失败,请稍后重试"); } + logService.saveLogin(sysUser.getUserName(), "登录", "登录成功", null, "成功"); + //生成系统token + return R.ok(tokenService.createToken(loginUser)); + } return R.fail("登录失败!"); } diff --git a/bonus-auth/src/main/java/com/bonus/auth/form/LoginBody.java b/bonus-auth/src/main/java/com/bonus/auth/form/LoginBody.java index a27e41a..5724fdb 100644 --- a/bonus-auth/src/main/java/com/bonus/auth/form/LoginBody.java +++ b/bonus-auth/src/main/java/com/bonus/auth/form/LoginBody.java @@ -38,4 +38,13 @@ public class LoginBody { private String mobileCodeType; + /** + * i皖送使用的ticket + */ + private String ticket; + + /** + * i皖送登录方式 0:web端登录 1:H5登录 + */ + private String sysType; } \ No newline at end of file diff --git a/bonus-auth/src/main/java/com/bonus/auth/service/SysLoginService.java b/bonus-auth/src/main/java/com/bonus/auth/service/SysLoginService.java index 55a3d7b..56de7e6 100644 --- a/bonus-auth/src/main/java/com/bonus/auth/service/SysLoginService.java +++ b/bonus-auth/src/main/java/com/bonus/auth/service/SysLoginService.java @@ -1,5 +1,6 @@ package com.bonus.auth.service; +import com.alibaba.fastjson.JSONObject; import com.bonus.auth.config.VerificationCodeType; import com.bonus.auth.factory.VerificationCodeStrategyFactory; import com.bonus.auth.form.RegisterBody; @@ -17,16 +18,22 @@ import com.bonus.system.api.RemoteUserService; import com.bonus.system.api.domain.SysUser; import com.bonus.system.api.model.LoginUser; import com.hankcs.hanlp.HanLP; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; /** * 登录校验方法 * 提供登录、注册、验证码获取等服务 */ @Component +@Slf4j public class SysLoginService { @Autowired private RemoteUserService remoteUserService; @@ -184,4 +191,99 @@ public class SysLoginService { return pinyin; } } + + /** + * i皖送Web端登录 + * @param ticket + * @param iwsWebAppId + * @param iwsWebUrl + * @return + */ + public void iwsWebLogin(String ticket, String iwsWebAppId, String iwsWebUrl,LoginUser loginUser,SysUser sysUser) { + Map paramMap = new HashMap<>(); + paramMap.put("ticket", ticket); + paramMap.put("appId", iwsWebAppId); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity authResponse = restTemplate.getForEntity(iwsWebUrl, 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"); + sysUser.setUserName(data.get("userName").toString()); + sysUser.setNickName(data.get("name").toString()); + sysUser.setPhonenumber(data.get("mobile").toString()); + loginUser.setSysUser(sysUser); + createUser(sysUser,loginUser); + } + } + + /** + * 先查,如果没有进行创建 + * @param sysUser + * @param loginUser + */ + private void createUser(SysUser sysUser, LoginUser loginUser) { + //通过用户名获取人员信息 + 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(sysUser.getNickName()); + registerBody.setMobile(sysUser.getPhonenumber()); + sysUser.setPassword(SecurityConstants.PASSWORD); + //新用户注册 + try { + 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(); + } + } + + /** + * i皖送H5端登录 + * @param ticket + * @param iwsH5AppId + * @param iwsH5Url + * @return + */ + public void iwsH5Login(String ticket, String iwsH5AppId, String iwsH5Url,LoginUser loginUser,SysUser sysUser) { + Map paramMap = new HashMap<>(); + paramMap.put("ticket", ticket); + paramMap.put("appId", iwsH5AppId); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity authResponse = restTemplate.getForEntity(iwsH5Url, 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"); + JSONObject userInfo = data.getJSONObject("userInfo"); + sysUser.setUserName(userInfo.get("userName").toString()); + sysUser.setNickName(userInfo.get("name").toString()); + sysUser.setPhonenumber(userInfo.get("mobile").toString()); + loginUser.setSysUser(sysUser); + createUser(sysUser,loginUser); + } + } }