|
|
@@ -1,7 +1,12 @@
|
|
|
package space.anyi.openapi.controller;
|
|
|
|
|
|
+import cn.hutool.crypto.digest.MD5;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
-import space.anyi.openapi.model.User;
|
|
|
+import space.anyi.openApi.comom.model.User;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
|
|
|
/**
|
|
|
* @ProjectName: yangyi-open-api-platform
|
|
|
@@ -44,9 +49,50 @@ public class UserController {
|
|
|
}
|
|
|
//通过RequestBody的方式
|
|
|
@PostMapping("/body")
|
|
|
- public String getUserNameByBody(@RequestBody User user){
|
|
|
+ public String getUserNameByBody(@RequestBody User user, HttpServletRequest servletRequest, HttpServletResponse servletResponse){
|
|
|
+ System.out.println(user);
|
|
|
+ servletResponse.setCharacterEncoding(StandardCharsets.UTF_8.name());
|
|
|
+ servletResponse.setContentType("text/html;charset=utf-8");
|
|
|
+ //获取认证鉴权参数
|
|
|
+ /**
|
|
|
+ * 客户端传输四个参数即可:
|
|
|
+ * - accessKey
|
|
|
+ * - timestamp
|
|
|
+ * - sign
|
|
|
+ * - nonce
|
|
|
+ */
|
|
|
+ String accessKey = servletRequest.getHeader("accessKey");
|
|
|
+ String timestamp = servletRequest.getHeader("timestamp");
|
|
|
+ String sign = servletRequest.getHeader("sign");
|
|
|
+ String nonce = servletRequest.getHeader("nonce");
|
|
|
+ //校验
|
|
|
+ String[] data = selectFormDB();
|
|
|
+ String ACCESS_KEY = data[0];
|
|
|
+ String SECRET_KEY = data[1];
|
|
|
+ //校验accessKey
|
|
|
+ if (!ACCESS_KEY.equals(accessKey)) {
|
|
|
+ return "accessKey错误";
|
|
|
+ }
|
|
|
+ //todo:校验timestamp,时间误差不超过1minute
|
|
|
+ //校验sign
|
|
|
+ if (!MD5.create().digestHex16(SECRET_KEY+timestamp+SECRET_KEY).equals(sign)) {
|
|
|
+ return "secretKey错误";
|
|
|
+ }
|
|
|
+ //todo:校验nonce防止重放攻击
|
|
|
String username = user.getName();
|
|
|
System.out.println(username);
|
|
|
return username;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 模拟从数据库查询accessKey和secretKey
|
|
|
+ * @return {@code String[] }
|
|
|
+ * @description:
|
|
|
+ * @author: 杨逸
|
|
|
+ * @data:2025/10/18 14:49:58
|
|
|
+ * @since 1.0.0
|
|
|
+ */
|
|
|
+ private String[] selectFormDB() {
|
|
|
+ return new String[]{"accessKey","secretKey"};
|
|
|
+ }
|
|
|
}
|