diff --git a/adc-da-jwtLogin/src/main/java/com/adc/da/login/rest/LoginRestController.java b/adc-da-jwtLogin/src/main/java/com/adc/da/login/rest/LoginRestController.java index 478694a7..677cdbea 100644 --- a/adc-da-jwtLogin/src/main/java/com/adc/da/login/rest/LoginRestController.java +++ b/adc-da-jwtLogin/src/main/java/com/adc/da/login/rest/LoginRestController.java @@ -6,6 +6,8 @@ import com.adc.da.http.Result; import com.adc.da.login.util.IDMUtil; import com.adc.da.login.util.IpUtil; import com.adc.da.login.util.JwtUtils; +import com.adc.da.login.util.WeLinkUtil; +import com.adc.da.login.vo.WeLinkVO; import com.adc.da.sys.entity.LoginInfoEO; import com.adc.da.sys.entity.UserEO; import com.adc.da.sys.service.ILoginInfoEOService; @@ -31,7 +33,6 @@ import java.io.UnsupportedEncodingException; import java.net.*; import java.nio.charset.StandardCharsets; import java.util.Enumeration; -import java.util.List; @Validated @@ -46,6 +47,8 @@ public class LoginRestController { @Autowired private IDMUtil idmUtil; @Autowired + private WeLinkUtil weLinkUtil; + @Autowired private JwtUtils jwtUtils; @Autowired private ILoginInfoEOService loginInfoEOService; @@ -120,6 +123,39 @@ public class LoginRestController { } + @ApiOperation(value = "通过welink免登录授权码查询iftapp免登录授权码") + @PostMapping(value = "/getTokenToWeLink") + @ResponseBody + public ResponseMessage getIftappCodeByWelinkCode(HttpServletRequest request, WeLinkVO linkVO) throws UnsupportedEncodingException { + String account = weLinkUtil.getIftappCodeByWelinkCode(linkVO); + if(StringUtils.isBlank(account)){ + return Result.error("r0011", "用户不存在"); + } + UserEO userEO = userService.getUserByLoginNameNotDeleted(account); + if (null == userEO) { + return Result.error("r0011", "用户不存在"); + } + if(userEO.getDisableFlag()==1){ + return Result.error("r0011", "帐号已禁用"); + } + String position = userService.selectPositionByUserId(account); + if(StringUtils.isBlank(position)){ + return Result.error("r0011", "无配置岗位"); + } + String token = jwtUtils.generateToken(userEO.getUsid()); + userEO.setToken(token); + // 加密重要信息 + BASE64Encoder encoder = new BASE64Encoder(); + String userStr = JSON.toJSONString(userEO); + String userStr2 = URLEncoder.encode(userStr,"UTF-8"); + userStr = encoder.encode(userStr2.getBytes()); + LoginInfoEO loginInfoEO=new LoginInfoEO(); + loginInfoEO.setUserId(userEO.getUsid()); + loginInfoEO.setLoginAddress(IpUtil.getIpAddr(request)); + loginInfoEOService.saveBean(loginInfoEO); + return Result.success(userStr); + } + @ApiOperation(value = "登录") // @GetMapping(value = "/login") @GetMapping(value = "/checkPageNoEncryption") diff --git a/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java b/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java index d25ebf10..964367bb 100644 --- a/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java +++ b/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java @@ -31,6 +31,7 @@ public class WebMvcConfig implements WebMvcConfigurer { addInterceptor.excludePathPatterns("/api/loginIdm"); addInterceptor.excludePathPatterns("/api/checkPage"); addInterceptor.excludePathPatterns("/api/checkPageNoEncryption"); + addInterceptor.excludePathPatterns("/api/getTokenToWeLink"); /** * AWG 接口 diff --git a/adc-da-jwtLogin/src/main/java/com/adc/da/login/util/WeLinkUtil.java b/adc-da-jwtLogin/src/main/java/com/adc/da/login/util/WeLinkUtil.java new file mode 100644 index 00000000..238edf98 --- /dev/null +++ b/adc-da-jwtLogin/src/main/java/com/adc/da/login/util/WeLinkUtil.java @@ -0,0 +1,66 @@ +package com.adc.da.login.util; + +import com.adc.da.login.vo.WeLinkVO; +import com.adc.da.ocr.util.OkHttpUtil; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONObject; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +@Slf4j +public class WeLinkUtil { + + @Autowired + private OkHttpUtil okHttpUtil; + + private final String access_url = "https://iftappwelink.foton.com.cn/devserver/welink/"; + + public String getIftappCodeByWelinkCode(WeLinkVO linkVO){ + try{ + String access_token = ""; + Map param = new HashMap<>(); + param.put("code",linkVO.getCode()); + param.put("name",linkVO.getName().replace("%20"," ")); + if(StringUtils.isNotBlank(linkVO.getType())){ + param.put("type",linkVO.getType()); + } + if(StringUtils.isNotBlank(linkVO.getCorpCode())){ + param.put("corpCode",linkVO.getCorpCode()); + } + String access_token_str = okHttpUtil.post(access_url+"getIftappCodeByWelinkCode",param,new HashMap<>()); + JSONObject atJsonObj = JSONObject.fromObject(access_token_str); + System.out.println("AccessTokenJSON:" + atJsonObj); + if (atJsonObj.has("data")) { + System.out.println("data:" + atJsonObj.get("data")); + JSONObject obj = JSONObject.fromObject(atJsonObj.getOrDefault("data","")); + + if(obj.has("access_token")){ + access_token = obj.getOrDefault("access_token","").toString(); + } + } + if(StringUtils.isBlank(access_token)){ + return ""; + } + Map param_p = new HashMap<>(); + param_p.put("code",access_token); + String principal_json = okHttpUtil.get(access_url+"getUserInfoByAuthCode",param_p,new HashMap<>()); + JSONObject pfjsonObj = JSONObject.fromObject(principal_json); + if (pfjsonObj.has("data")) { + System.out.println("data:" + pfjsonObj.get("data")); + JSONObject obj = JSONObject.fromObject(pfjsonObj.getOrDefault("data","")); + + if(obj.has("username")){ + return obj.getOrDefault("username","").toString(); + } + } + }catch(Exception e){ + log.error("通过iftapp授权码查询用户信息失败"); + } + return ""; + } +} diff --git a/adc-da-jwtLogin/src/main/java/com/adc/da/login/vo/WeLinkVO.java b/adc-da-jwtLogin/src/main/java/com/adc/da/login/vo/WeLinkVO.java new file mode 100644 index 00000000..6185f2d4 --- /dev/null +++ b/adc-da-jwtLogin/src/main/java/com/adc/da/login/vo/WeLinkVO.java @@ -0,0 +1,12 @@ +package com.adc.da.login.vo; + +import lombok.Data; + +@Data +public class WeLinkVO { + + private String code; + private String name; + private String type; + private String corpCode; +} \ No newline at end of file