Commit b6f14f70 by 袁伟铭

完善api接口

parent be96a3e0
...@@ -36,12 +36,6 @@ ...@@ -36,12 +36,6 @@
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency> </dependency>
<!--Spring devtools 热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 远程调用cloud feign --> <!-- 远程调用cloud feign -->
<dependency> <dependency>
......
...@@ -63,11 +63,15 @@ public class FeignConfig { ...@@ -63,11 +63,15 @@ public class FeignConfig {
} }
if (HEADERS_TO_TRY.contains(name.toUpperCase())) { if (HEADERS_TO_TRY.contains(name.toUpperCase())) {
String values = request.getHeader(name); String values = request.getHeader(name);
if (name.equalsIgnoreCase("AUTHORIZATION") && !values.startsWith("Bearer ")) {
template.header("Authorization", "Bearer " + values);
} else {
template.header(name, values); template.header(name, values);
} }
} }
} }
} }
}
}; };
} }
......
...@@ -42,11 +42,6 @@ public class ApiController { ...@@ -42,11 +42,6 @@ public class ApiController {
return ApiUtils.getSuccessResp(form); return ApiUtils.getSuccessResp(form);
} }
//解析业务参数
if (!form.parseBizContent()) {
return ApiUtils.getParamError(form);
}
String method = form.getMethod(); String method = form.getMethod();
if (StrUtil.isBlank(method)) { if (StrUtil.isBlank(method)) {
method = request.getParameter("method"); method = request.getParameter("method");
...@@ -59,6 +54,10 @@ public class ApiController { ...@@ -59,6 +54,10 @@ public class ApiController {
// 身份验证 // 身份验证
resp = apiService.auth(form, appId, appSecret, Authorization); resp = apiService.auth(form, appId, appSecret, Authorization);
if (resp.isSuccess()) { if (resp.isSuccess()) {
//解析业务参数
if (!form.parseBizContent()) {
return ApiUtils.getParamError(form);
}
// 调用接口方法 // 调用接口方法
resp = apiService.action(form); resp = apiService.action(form);
} }
......
...@@ -3,10 +3,7 @@ package com.zq.api.feign; ...@@ -3,10 +3,7 @@ package com.zq.api.feign;
import com.zq.api.config.FeignConfig; import com.zq.api.config.FeignConfig;
import com.zq.common.vo.ResultVo; import com.zq.common.vo.ResultVo;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Map; import java.util.Map;
...@@ -14,28 +11,31 @@ import java.util.Map; ...@@ -14,28 +11,31 @@ import java.util.Map;
* @author wilmiam * @author wilmiam
* @since 2021-08-09 10:48 * @since 2021-08-09 10:48
*/ */
@FeignClient(name = "SYS-SERVER", path = "/sys/api", configuration = FeignConfig.class) @FeignClient(name = "SYS-SERVER", path = "/sys", configuration = FeignConfig.class)
public interface SysFeign { public interface SysFeign {
@GetMapping("/user/sendCode") @GetMapping("/api/user/sendCode")
ResultVo sendCode(@RequestParam String phone); ResultVo sendCode(@RequestParam String phone);
@PostMapping("/user/resetPassword") @PostMapping("/api/user/resetPassword")
ResultVo resetPassword(@RequestBody Map<String, Object> paramsMap); ResultVo resetPassword(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/user/phoneLogin") @PostMapping("/api/user/phoneLogin")
ResultVo phoneLogin(@RequestBody Map<String, Object> paramsMap); ResultVo phoneLogin(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/user/passwdLogin") @PostMapping("/api/user/passwdLogin")
ResultVo passwdLogin(@RequestBody Map<String, Object> paramsMap); ResultVo passwdLogin(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/user/modifyPasswd") @PostMapping("/api/user/modifyPasswd")
ResultVo modifyPasswd(@RequestBody Map<String, Object> paramsMap); ResultVo modifyPasswd(@RequestBody Map<String, Object> paramsMap);
@GetMapping("/version/getAppVersion") @GetMapping("/api/version/getAppVersion")
ResultVo getAppVersion(@RequestParam String appName); ResultVo getAppVersion(@RequestParam String appName);
@GetMapping(value = "/getApiUserByAppId") @GetMapping(value = "/api/getApiUserByAppId")
ResultVo getApiUserByAppId(@RequestParam String appId, @RequestParam String appSecret); ResultVo getApiUserByAppId(@RequestParam String appId, @RequestParam String appSecret);
@GetMapping(value = "/single/getUserInfo/{appId}")
ResultVo getSingleUserInfo(@PathVariable String appId);
} }
...@@ -203,8 +203,9 @@ public class ApiForm { ...@@ -203,8 +203,9 @@ public class ApiForm {
public String getSignStr(String key) { public String getSignStr(String key) {
TreeMap<String, String> treeMap = new TreeMap<>(); TreeMap<String, String> treeMap = new TreeMap<>();
treeMap.put("appId", this.appId);
treeMap.put("apiNo", this.apiNo);
treeMap.put("timestamp", this.timestamp); treeMap.put("timestamp", this.timestamp);
// treeMap.put("nonce", this.nonce);
treeMap.put("method", this.method); treeMap.put("method", this.method);
treeMap.put("version", this.version); treeMap.put("version", this.version);
String bizContent = StrUtil.isBlank(this.bizContent) ? "" : this.bizContent; String bizContent = StrUtil.isBlank(this.bizContent) ? "" : this.bizContent;
......
...@@ -26,6 +26,7 @@ public class ApiResp { ...@@ -26,6 +26,7 @@ public class ApiResp {
} }
public ApiResp(ApiForm form, ApiCodeEnum apiCodeEnum) { public ApiResp(ApiForm form, ApiCodeEnum apiCodeEnum) {
this.apiNo = form.getApiNo();
this.code = apiCodeEnum.code(); this.code = apiCodeEnum.code();
this.msg = apiCodeEnum.msg(); this.msg = apiCodeEnum.msg();
} }
......
...@@ -108,7 +108,7 @@ public class ApiService { ...@@ -108,7 +108,7 @@ public class ApiService {
form.setApiTokenVo(apiTokenVo); form.setApiTokenVo(apiTokenVo);
// 认证签名 // 认证签名
String key = redisUtils.getStr(form.getToken()); String key = redisUtils.getStr(token);
String serverSign = ApiUtils.getSign(form.getSignStr(key == null ? "" : key)); String serverSign = ApiUtils.getSign(form.getSignStr(key == null ? "" : key));
if (!serverSign.equals(form.getSign())) { if (!serverSign.equals(form.getSign())) {
return ApiUtils.getCheckSignValidError(form); return ApiUtils.getCheckSignValidError(form);
......
...@@ -211,6 +211,16 @@ public interface IApiLogic extends IApiCommon { ...@@ -211,6 +211,16 @@ public interface IApiLogic extends IApiCommon {
*/ */
ApiResp getCremationStatsList(ApiForm form); ApiResp getCremationStatsList(ApiForm form);
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓SYS接口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 获取单点登录用户信息
*
* @param form
* @return
*/
ApiResp getSingleUserInfo(ApiForm form);
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓开放接口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/ /*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓开放接口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/** /**
......
...@@ -97,7 +97,7 @@ public class ApiV100Logic extends BaseApiLogic implements IApiLogic { ...@@ -97,7 +97,7 @@ public class ApiV100Logic extends BaseApiLogic implements IApiLogic {
@Override @Override
public ApiResp getAreaUnderNumStats(ApiForm form) { public ApiResp getAreaUnderNumStats(ApiForm form) {
return ApiUtils.toApiResp(form,portalFeign.getAreaUnderNumStats(form.getParamsMap())); return ApiUtils.toApiResp(form, portalFeign.getAreaUnderNumStats(form.getParamsMap()));
} }
@Override @Override
...@@ -151,6 +151,11 @@ public class ApiV100Logic extends BaseApiLogic implements IApiLogic { ...@@ -151,6 +151,11 @@ public class ApiV100Logic extends BaseApiLogic implements IApiLogic {
} }
@Override @Override
public ApiResp getSingleUserInfo(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.getSingleUserInfo(form.getAppId()));
}
@Override
public ApiResp marriageSearch(ApiForm form) { public ApiResp marriageSearch(ApiForm form) {
Map<String, Object> paramsMap = form.getParamsMap(); Map<String, Object> paramsMap = form.getParamsMap();
ApiTokenVo apiTokenVo = form.getApiTokenVo(); ApiTokenVo apiTokenVo = form.getApiTokenVo();
......
package com.zq.api.utils; package com.zq.api.utils;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.crypto.digest.MD5; import cn.hutool.crypto.digest.MD5;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.zq.api.constant.ApiCodeEnum; import com.zq.api.constant.ApiCodeEnum;
import com.zq.api.form.ApiForm; import com.zq.api.form.ApiForm;
import com.zq.api.form.ApiResp; import com.zq.api.form.ApiResp;
...@@ -13,8 +21,10 @@ import com.zq.common.vo.ResultVo; ...@@ -13,8 +21,10 @@ import com.zq.common.vo.ResultVo;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.TreeMap;
@Component @Component
public class ApiUtils { public class ApiUtils {
...@@ -224,4 +234,62 @@ public class ApiUtils { ...@@ -224,4 +234,62 @@ public class ApiUtils {
return MD5.create().digestHex(content).toUpperCase(); return MD5.create().digestHex(content).toUpperCase();
} }
public static void main(String[] args) {
String appId = "d469c70c4e8b11ecaa2900163e1475c7";
String apiNo = IdUtil.simpleUUID();
String method = "getSingleUserInfo";
String timestamp = System.currentTimeMillis() + "";
String version = "1.0.0";
String bizContent = "{}";
bizContent = StrUtil.isBlank(bizContent) ? "" : URLUtil.encode(Base64.encode(bizContent), StandardCharsets.UTF_8);
Map<String, String> params = new HashMap<>();
params.put("appId", appId);
params.put("apiNo", apiNo);
params.put("method", method);
params.put("timestamp", timestamp);
params.put("bizContent", bizContent);
params.put("version", version);
// 签名参数排序
TreeMap<String, String> signTreeMap = new TreeMap<>();
signTreeMap.put("appId", appId);
signTreeMap.put("apiNo", apiNo);
signTreeMap.put("timestamp", timestamp);
signTreeMap.put("method", method);
signTreeMap.put("version", version);
signTreeMap.put("bizContent", bizContent);
// 拼接签名参数
StringBuilder src = new StringBuilder();
for (Map.Entry<String, String> entry : signTreeMap.entrySet()) {
src.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
}
src.append("key=").append("ce8fcdd1ae6e42efaabe8819e3fbd8da");
params.put("sign", MD5.create().digestHex(src.toString()).toUpperCase());
HttpRequest request = HttpRequest.post("http://127.0.0.1:9888/api/action")
.header("appId", appId)
.header("appSecret", "e209eb5e4e8b11ecaa2900163e1475c7")
.header("Authorization", "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImF1dGgiOiJhZG1pbiIsImp0aSI6IjY4OTJlY2E2OTAwNzRjZDRhOGI0NjJlNDM5NDNhZmI1In0.AB77eTqqiBsSunVChqfAx9jB8FN58I7fph1Dw-RfYEVWvN-U2AQYYvuMlCczsiBbduL0vCNALjBzo_1jjKlAPg")
.contentType("application/x-www-form-urlencoded")
.formStr(params);
HttpResponse execute = request.execute();
String body = execute.body();
System.out.println("响应 => " + body);
// 失败 => {"apiNo":"09c1ad82ec0f4b2d80cae0cfb1d7059b","code":"103","msg":"调用方法异常","timestamp":1638176339560,"data":null,"success":false}
// 成功 => {"apiNo":"bc070a7c31ac4b8eb1180b2d82a2096b","code":"200","msg":"成功","timestamp":1638176552353,"data":{"userId":"123","username":"admin@gxfy.com"},"success":true}
int status = execute.getStatus();
if (status == 200) {
JSONObject obj = JSONUtil.parseObj(body);
Integer code = obj.getInt("code");
if (code == 200) {
JSONObject data = obj.getJSONObject("data");
System.out.println("成功拿到数据 => " + data);
}
}
}
} }
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
<pagehelper.version>5.2.0</pagehelper.version> <pagehelper.version>5.2.0</pagehelper.version>
<jjwt.version>0.9.1</jjwt.version> <jjwt.version>0.9.1</jjwt.version>
<fastjson.version>1.2.76</fastjson.version> <fastjson.version>1.2.76</fastjson.version>
<hutool.version>5.7.7</hutool.version> <hutool.version>5.7.16</hutool.version>
</properties> </properties>
<modules> <modules>
......
...@@ -21,7 +21,7 @@ import java.util.Date; ...@@ -21,7 +21,7 @@ import java.util.Date;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Builder @Builder
@TableName(value = "t_blind_user_info") @TableName(value = "t_bind_user_info")
public class BindUserInfo { public class BindUserInfo {
/** /**
......
...@@ -142,10 +142,10 @@ public class SingleService { ...@@ -142,10 +142,10 @@ public class SingleService {
String serviceUrl = request.getParameter("service"); String serviceUrl = request.getParameter("service");
AssertUtils.hasText(serviceUrl, "跳转地址为空"); AssertUtils.hasText(serviceUrl, "跳转地址为空");
// String passwd = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, vo.getPasswd()); String passwd = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, vo.getPasswd());
UsernamePasswordAuthenticationToken authenticationToken = UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(vo.getUsername(), vo.getPasswd()); new UsernamePasswordAuthenticationToken(vo.getUsername(), passwd);
Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication); SecurityContextHolder.getContext().setAuthentication(authentication);
// 生成令牌 // 生成令牌
...@@ -157,8 +157,7 @@ public class SingleService { ...@@ -157,8 +157,7 @@ public class SingleService {
String key = IdUtil.simpleUUID(); String key = IdUtil.simpleUUID();
redisUtils.setStr(token, key, properties.getTokenValidityInSeconds() / 1000, TimeUnit.SECONDS); redisUtils.setStr(token, key, properties.getTokenValidityInSeconds() / 1000, TimeUnit.SECONDS);
response.setHeader(properties.getHeader(), properties.getTokenStartWith() + token); response.sendRedirect(serviceUrl + "?" + properties.getHeader() + "=" + token + "&key=" + key);
response.sendRedirect(serviceUrl + "?" + properties.getHeader() + "=" + properties.getTokenStartWith() + token + "&key=" + key);
} catch (Exception e) { } catch (Exception e) {
log.error("【{}】单点登录错误 => {}", vo.getUsername(), e.getMessage()); log.error("【{}】单点登录错误 => {}", vo.getUsername(), e.getMessage());
ServletUtil.write(response, e.getMessage(), "application/json;charset=utf-8"); ServletUtil.write(response, e.getMessage(), "application/json;charset=utf-8");
...@@ -172,7 +171,7 @@ public class SingleService { ...@@ -172,7 +171,7 @@ public class SingleService {
SysInfo sysInfo = sysInfoDao.selectOne(Wrappers.lambdaQuery(SysInfo.builder().appId(appId).build())); SysInfo sysInfo = sysInfoDao.selectOne(Wrappers.lambdaQuery(SysInfo.builder().appId(appId).build()));
BindUserInfo bindUserInfo = blindUserInfoDao.selectOne(Wrappers.lambdaQuery(BindUserInfo.builder().sysId(sysInfo.getId()).userId(adminContext.getUserId()).build())); BindUserInfo bindUserInfo = blindUserInfoDao.selectOne(Wrappers.lambdaQuery(BindUserInfo.builder().sysId(sysInfo.getId()).userId(adminContext.getUserId()).build()));
AssertUtils.notNull(bindUserInfo, 501, "用户未绑定该系统"); AssertUtils.notNull(bindUserInfo, "用户未绑定该系统");
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
data.put("userId", bindUserInfo.getSystemUserId()); data.put("userId", bindUserInfo.getSystemUserId());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment