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

This commit is contained in:
15856 2024-12-20 09:41:34 +08:00
parent 817f722332
commit 49e65d6f67
2 changed files with 87 additions and 0 deletions

View File

@ -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<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");
//根据用户信息来生成token并保存不过目前来说因为不知道返回的内容这里先用一个固定数据来生成token后期修改
LoginUser loginUser = new LoginUser();
SysUser sysUser = new SysUser();
sysUser.setUserName(data.get("name").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("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("登录失败!");
}
/**
* 获取手机验证码
*

View File

@ -46,4 +46,9 @@ public class SecurityConstants
* 角色权限
*/
public static final String ROLE_PERMISSION = "role_permission";
/**
* i皖送初始化密码
*/
public static final String PASSWORD = "Iws@20241219";
}