i皖送统一认证登录接口编写

This commit is contained in:
15856 2024-12-25 11:02:21 +08:00
parent 387898a830
commit 8e91de1d1b
3 changed files with 135 additions and 59 deletions

View File

@ -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<String, Object> paramMap = new HashMap<>();
paramMap.put("ticket", ticket);
paramMap.put("appId", iwsAppId);
ResponseEntity<String> authResponse = restTemplate.getForEntity(iwsUrl, String.class, paramMap);
log.info("authResponse:" + authResponse.toString());
if ("200".equals(authResponse.getStatusCode())){
// 根据ResponseEntity<String> 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<LoginUser> 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("登录失败!");
}

View File

@ -38,4 +38,13 @@ public class LoginBody {
private String mobileCodeType;
/**
* i皖送使用的ticket
*/
private String ticket;
/**
* i皖送登录方式 0web端登录 1H5登录
*/
private String sysType;
}

View File

@ -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<String, Object> paramMap = new HashMap<>();
paramMap.put("ticket", ticket);
paramMap.put("appId", iwsWebAppId);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> authResponse = restTemplate.getForEntity(iwsWebUrl, String.class, paramMap);
log.info("authResponse:" + authResponse.toString());
if ("200".equals(authResponse.getStatusCode())){
// 根据ResponseEntity<String> 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<LoginUser> 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<String, Object> paramMap = new HashMap<>();
paramMap.put("ticket", ticket);
paramMap.put("appId", iwsH5AppId);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> authResponse = restTemplate.getForEntity(iwsH5Url, String.class, paramMap);
log.info("authResponse:" + authResponse.toString());
if ("200".equals(authResponse.getStatusCode())){
// 根据ResponseEntity<String> 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);
}
}
}