i皖送统一认证登录接口编写
This commit is contained in:
parent
387898a830
commit
8e91de1d1b
|
|
@ -78,11 +78,17 @@ public class TokenController {
|
||||||
@Resource
|
@Resource
|
||||||
private RemoteConfigService configService;
|
private RemoteConfigService configService;
|
||||||
|
|
||||||
@Value("${third-party-login.iws.appId}")
|
@Value("${third-party-login.iws.webAppId}")
|
||||||
private String iwsAppId;
|
private String iwsWebAppId;
|
||||||
|
|
||||||
@Value("${third-party-login.iws.url}")
|
@Value("${third-party-login.iws.webUrl}")
|
||||||
private String iwsUrl;
|
private String iwsWebUrl;
|
||||||
|
|
||||||
|
@Value("${third-party-login.iws.h5AppId}")
|
||||||
|
private String iwsH5AppId;
|
||||||
|
|
||||||
|
@Value("${third-party-login.iws.h5Url}")
|
||||||
|
private String iwsH5Url;
|
||||||
|
|
||||||
@PostMapping("isAdmin")
|
@PostMapping("isAdmin")
|
||||||
public R<?> isAdmin(@RequestBody LoginBody form) {
|
public R<?> isAdmin(@RequestBody LoginBody form) {
|
||||||
|
|
@ -154,68 +160,27 @@ public class TokenController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* i皖送登录
|
* i皖送登录
|
||||||
* @param req
|
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@PostMapping("iwsLogin")
|
@PostMapping("iwsLogin")
|
||||||
public R<?> iwsLogin(@RequestBody HttpServletRequest req) {
|
public R<?> iwsLogin(@RequestBody LoginBody form) {
|
||||||
//获取i皖送传过来的票据
|
//获取i皖送传过来的票据
|
||||||
String ticket = req.getParameter("ticket");
|
String ticket = form.getTicket();
|
||||||
log.info("ticket=" + ticket);
|
log.info("ticket=" + ticket);
|
||||||
if (StringUtils.isNotEmpty(ticket)) {
|
if (StringUtils.isNotEmpty(ticket)) {
|
||||||
//获取系统标识,这里可以放到配置文件中
|
LoginUser loginUser = new LoginUser();
|
||||||
//String appId = "ec3fce308fcc407a79e1f09938ba16ab";
|
SysUser sysUser = new SysUser();
|
||||||
//调用i皖送平台进行认证获取用户信息
|
if (form.getSysType()!=null && "1".equals(form.getSysType())){
|
||||||
//String url = "http://sgwpdm.ah.sgcc.com.cn/iws/workplat/auth/auth-by-ticket?ticket={ticket}&appId={appId}";
|
sysLoginService.iwsH5Login(ticket,iwsH5AppId,iwsH5Url,loginUser,sysUser);
|
||||||
RestTemplate restTemplate = new RestTemplate();
|
} else if (form.getSysType()!=null && "0".equals(form.getSysType())) {
|
||||||
Map<String, Object> paramMap = new HashMap<>();
|
sysLoginService.iwsWebLogin(ticket,iwsWebAppId,iwsWebUrl,loginUser,sysUser);
|
||||||
paramMap.put("ticket", ticket);
|
}else {
|
||||||
paramMap.put("appId", iwsAppId);
|
throw new ServiceException("登录失败,请稍后重试");
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
|
logService.saveLogin(sysUser.getUserName(), "登录", "登录成功", null, "成功");
|
||||||
|
//生成系统token
|
||||||
|
return R.ok(tokenService.createToken(loginUser));
|
||||||
|
|
||||||
}
|
}
|
||||||
return R.fail("登录失败!");
|
return R.fail("登录失败!");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,4 +38,13 @@ public class LoginBody {
|
||||||
|
|
||||||
private String mobileCodeType;
|
private String mobileCodeType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* i皖送使用的ticket
|
||||||
|
*/
|
||||||
|
private String ticket;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* i皖送登录方式 0:web端登录 1:H5登录
|
||||||
|
*/
|
||||||
|
private String sysType;
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.bonus.auth.service;
|
package com.bonus.auth.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.bonus.auth.config.VerificationCodeType;
|
import com.bonus.auth.config.VerificationCodeType;
|
||||||
import com.bonus.auth.factory.VerificationCodeStrategyFactory;
|
import com.bonus.auth.factory.VerificationCodeStrategyFactory;
|
||||||
import com.bonus.auth.form.RegisterBody;
|
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.domain.SysUser;
|
||||||
import com.bonus.system.api.model.LoginUser;
|
import com.bonus.system.api.model.LoginUser;
|
||||||
import com.hankcs.hanlp.HanLP;
|
import com.hankcs.hanlp.HanLP;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录校验方法
|
* 登录校验方法
|
||||||
* 提供登录、注册、验证码获取等服务
|
* 提供登录、注册、验证码获取等服务
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
|
@Slf4j
|
||||||
public class SysLoginService {
|
public class SysLoginService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private RemoteUserService remoteUserService;
|
private RemoteUserService remoteUserService;
|
||||||
|
|
@ -184,4 +191,99 @@ public class SysLoginService {
|
||||||
return pinyin;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue