Merge remote-tracking branch 'origin/cc_20230520_partner' into cc_20230520_partner

This commit is contained in:
zhangchenbiao
2023-06-19 19:54:53 +08:00
41 changed files with 916 additions and 156 deletions

View File

@@ -0,0 +1,26 @@
package com.cool.store.config;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* @Author: JCccc
* @Date: 2022-6-12 10:35
* @Description:
*/
public class BodyWrapperFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
ServletRequest requestWrapper = null;
if(servletRequest instanceof HttpServletRequest) {
requestWrapper = new CustomHttpServletRequestWrapper((HttpServletRequest) servletRequest);
}
if(requestWrapper == null) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
filterChain.doFilter(requestWrapper, servletResponse);
}
}
}

View File

@@ -0,0 +1,60 @@
package com.cool.store.config;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.*;
import java.nio.charset.StandardCharsets;
/**
* @Author: JCccc
* @Date: 2022-6-12 10:36
* @Description: 重写一个自己的 RequestWrapper 拿出body给自己用
*/
public class CustomHttpServletRequestWrapper extends HttpServletRequestWrapper {
private byte[] body;
public CustomHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
BufferedReader reader = request.getReader();
try (StringWriter writer = new StringWriter()) {
int read;
char[] buf = new char[1024 * 8];
while ((read = reader.read(buf)) != -1) {
writer.write(buf, 0, read);
}
this.body = writer.getBuffer().toString().getBytes();
}
}
public String getBody(){
return new String(body, StandardCharsets.UTF_8);
}
@Override
public ServletInputStream getInputStream() {
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body);
return new ServletInputStream() {
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {
}
@Override
public int read() {
return byteArrayInputStream.read();
}
};
}
@Override
public BufferedReader getReader() {
return new BufferedReader(new InputStreamReader(this.getInputStream()));
}
}

View File

@@ -7,10 +7,7 @@ import com.cool.store.context.PartnerUserHolder;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.WechatMiniAppService;
import com.cool.store.utils.AesUtil;
import com.cool.store.utils.Md5Utils;
import com.cool.store.utils.Sha1Utils;
import com.cool.store.utils.UUIDUtils;
import com.cool.store.utils.*;
import com.cool.store.vo.PartnerUserInfoVO;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
@@ -26,8 +23,10 @@ import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author ydw
@@ -81,41 +80,51 @@ public class SignValidateFilter implements Filter {
MDC.put(CommonConstants.REQUEST_ID, UUIDUtils.get32UUID());
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
CustomHttpServletRequestWrapper wrapper = (CustomHttpServletRequestWrapper) request;
String uri = request.getRequestURI();
String method = request.getMethod();
String userStr = "";
boolean isInWhiteList = excludePath(uri);
log.info("url:{}", uri);
/* if ( !isInWhiteList && !method.equals("OPTIONS")) {
Map<String, String[]> parameterMap = request.getParameterMap();
String jsonStr = JSONObject.toJSONString(parameterMap);
JSONObject obj = JSONObject.parseObject(jsonStr);
log.info("params:{}", obj.toJSONString());
String params = obj.toJSONString();
if ( !isInWhiteList && !method.equals("OPTIONS")) {
String params = "";
if("GET".equalsIgnoreCase(method)){
Map<String, String> parameterMap = new HashMap();
Map<String, String[]> requestMap = request.getParameterMap();
for(String key : requestMap.keySet()){
parameterMap.put(key, requestMap.get(key)[0]);
}
params = JSONObject.toJSONString(parameterMap);
}else if("POST".equalsIgnoreCase(method)){
params = wrapper.getBody();
// params = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
}
log.info("params:{}", params);
String sign = request.getHeader("SIGN");
String nonce = request.getHeader("NONCE");
String timestamp = request.getHeader("TIMESTAMP");
String aesPhone = request.getHeader("PHONE");
String openid = request.getHeader("OPENID");
String phone = AesUtil.decrypt(aesPhone, signKey);
String md5Value = phone + Md5Utils.md5(Md5Utils.md5(openid));
log.info("sign:{}, nonce:{}, timestamp:{},aesPhone:{}, openid:{}, 解密后的手机号:{}, md5Value:{}",
sign, nonce, timestamp, aesPhone, openid, phone, md5Value);
String phone = AESDecryptor.decrypt(aesPhone, signKey);
String plaintextOpenid = AESDecryptor.decrypt(openid, signKey);
String md5Value = phone + Md5Utils.md5(Md5Utils.md5(plaintextOpenid));
log.info("sign:{}, nonce:{}, timestamp:{},aesPhone:{}, openid:{}, 解密后的手机号:{}, md5Value:{}, 明文plaintextOpenid:{}",
sign, nonce, timestamp, aesPhone, openid, phone, md5Value, plaintextOpenid);
String signStr = timestamp + nonce + params + signKey + md5Value;
String newSign = Sha1Utils.getSha1(signStr.getBytes());
log.info("newSign: {}", newSign);
log.info("signStr: {}, newSign: {}", signStr, newSign);
// 前后端验签不等
if (!newSign.equals(sign)) {
response.setStatus(HttpStatus.OK.value());
response.getWriter().write(JSON.toJSONString(ResponseResult.fail(ErrorCodeEnum.SIGN_FAIL)));
return;
}
PartnerUserInfoVO partnerUserInfoVO = wechatMiniAppService.getUserInfo(phone, openid);
PartnerUserInfoVO partnerUserInfoVO = wechatMiniAppService.getUserInfo(phone, plaintextOpenid);
if(partnerUserInfoVO != null){
userStr = JSONObject.toJSONString(partnerUserInfoVO);
log.info("url:{}, userStr:{}", uri, userStr);
}
}*/
}
try {
PartnerUserHolder.setUser(userStr);
filterChain.doFilter(servletRequest, servletResponse);

View File

@@ -0,0 +1,29 @@
package com.cool.store.config;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Author: JCccc
* @Date: 2022-6-23 10:52
* @Description:
*/
@Configuration
public class WebApplicationConfig {
@Bean
BodyWrapperFilter getBodyWrapperFilter(){
return new BodyWrapperFilter();
}
@Bean("bodyWrapperFilter")
public FilterRegistrationBean<BodyWrapperFilter> checkUserFilter(BodyWrapperFilter bodyWrapperFilter) {
FilterRegistrationBean<BodyWrapperFilter> registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(bodyWrapperFilter);
registrationBean.addUrlPatterns("/*");
registrationBean.setOrder(1);
registrationBean.setAsyncSupported(true);
return registrationBean;
}
}

View File

@@ -0,0 +1,42 @@
package com.cool.store.controller;
import com.cool.store.dto.content.ContentQueryListDto;
import com.cool.store.entity.HyContentInfoDO;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.ContentService;
import com.cool.store.vo.HyContentInfoVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("news")
@Api(tags = "动态")
@Slf4j
public class ContentController {
@Autowired
private ContentService contentService;
@PostMapping("/queryContentList")
@ApiOperation("查询动态列表")
public ResponseResult<PageInfo<HyContentInfoVO>> queryContentList(@RequestBody ContentQueryListDto dto) {
PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
List<HyContentInfoVO> list = contentService.queryContentList(dto);
PageInfo<HyContentInfoVO> page = new PageInfo<>(list);
return ResponseResult.success(page);
}
@PostMapping("/detail")
@ApiOperation("动态详情")
public ResponseResult<HyContentInfoDO> queryContentInfo(@RequestParam String contentId) {
return ResponseResult.success(contentService.queryContentInfo(contentId));
}
}

View File

@@ -38,16 +38,15 @@ public class MiniProgramAppController {
@ApiOperation("更新手机号")
@PostMapping("/updateUserPhoneNumber")
public ResponseResult<Boolean> updateUserPhoneNumber(@RequestBody @Valid MobileUpdateRequest request) {
public ResponseResult<String> updateUserPhoneNumber(@RequestBody @Valid MobileUpdateRequest request) {
PartnerUserInfoVO userInfoVO = PartnerUserHolder.getUser();
return ResponseResult.success(wechatMiniAppService.updateUserPhoneNumber(request, userInfoVO));
}
@ApiOperation("根据mobile和openId获取用户信息")
@PostMapping("/getUserInfo")
public ResponseResult<PartnerUserInfoVO> getUserInfo(@RequestParam(value = "mobile",required = false) String mobile,
@RequestParam(value = "openId",required = false) String openId){
PartnerUserInfoVO userInfoVO = wechatMiniAppService.getUserInfo(mobile, openId);
@GetMapping("/getUserInfo")
public ResponseResult<PartnerUserInfoVO> getUserInfo(){
PartnerUserInfoVO userInfoVO = PartnerUserHolder.getUser();
return ResponseResult.success(userInfoVO);
}
}