Merge branch 'cc_20230520_partner' of http://gitlab.coolcollege.cn/hangzhou/java/coolstore-partner-manage into cc_20230520_partner

# Conflicts:
#	coolstore-partner-webb/src/main/java/com/cool/store/config/TokenValidateFilter.java
This commit is contained in:
pserimal
2023-06-09 13:44:21 +08:00
47 changed files with 1128 additions and 347 deletions

View File

@@ -0,0 +1,46 @@
package com.cool.store.config;
import cn.hutool.http.HttpStatus;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Description 跨域配置
* @author Aaron
* @date 2020/1/9
*/
@Component
@Order(1)
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest reqs = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin",reqs.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, OPTIONS, GET, DELETE, PUT");
response.setHeader("Access-Control-Max-Age", "36000");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Origin, Authorization, content-type, XMLHttpRequest, Authorization, User-Agent, Cookie, accessToken");
if (reqs.getMethod().equals("OPTIONS") || reqs.getMethod().equals("HEAD")) {
response.setStatus(HttpStatus.HTTP_OK);
return;
}
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) {}
@Override
public void destroy() {}
}

View File

@@ -0,0 +1,69 @@
package com.cool.store.config;
import javafx.application.Application;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.util.List;
/**
* @author zhangchenbiao
* @FileName: ServletContextConfig
* @Description:
* @date 2023-06-08 16:28
*/
@Configuration
@ComponentScan(basePackageClasses = Application.class, useDefaultFilters = true)
public class ServletContextConfig extends WebMvcConfigurationSupport {
private final Logger logger = LoggerFactory.getLogger(ServletContextConfig.class);
/**
* 配置servlet处理
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "OPTIONS", "PUT", "DELETE")
.maxAge(3600);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
super.addResourceHandlers(registry);
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
}
/**
* 统一异常处理
*
* @param exceptionResolvers
*/
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
}
}

View File

@@ -3,8 +3,7 @@ package com.cool.store.config;
import com.alibaba.fastjson.JSON;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.response.ResponseResult;
import com.cool.store.context.UserContext;
import com.cool.store.utils.DataSourceHelper;
import com.cool.store.context.CurrentUserContext;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.context.CurrentUser;
import com.google.common.collect.Lists;
@@ -68,51 +67,49 @@ public class TokenValidateFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// HttpServletResponse response = (HttpServletResponse) servletResponse;
// HttpServletRequest reqs = (HttpServletRequest) servletRequest;
// String uri = reqs.getRequestURI();
// String method = reqs.getMethod();
// String userStr = "";
// CurrentUser currentUser = null;
// boolean isInWhiteList = excludePath(uri);
// String accessToken = reqs.getParameter("access_token");
// String key = "access_token:" + accessToken;
// if(StringUtils.isNotBlank(accessToken)){
// userStr = redisUtilPool.getString(key);
// if(StringUtils.isNotBlank(userStr)){
// currentUser = JSON.parseObject(userStr, CurrentUser.class);
// }
// }
// log.info("url:{}", uri);
// if ( !isInWhiteList && !method.equals("OPTIONS")) {
// if (StringUtils.isEmpty(accessToken)) {
// response.setStatus(HttpStatus.OK.value());
// response.getWriter().write(JSON.toJSONString(
// ResponseResult.fail(ErrorCodeEnum.ACCESS_TOKEN_INVALID)));
// return;
// }
// if (Objects.isNull(currentUser)) {
// response.setStatus(HttpStatus.OK.value());
// response.getWriter().write(JSON.toJSONString(
// ResponseResult.fail(ErrorCodeEnum.ACCESS_TOKEN_INVALID)));
// return;
// }
// log.info("url:{}, access_token:{}, userId:{}, username:{}, enterpriseId:{}", uri, accessToken, currentUser.getUserId(), currentUser.getName(), currentUser.getEnterpriseId());
// }
// if(StringUtils.isBlank(userStr) && !isInWhiteList){
// response.setStatus(HttpStatus.OK.value());
// response.getWriter().write(JSON.toJSONString(
// ResponseResult.fail(ErrorCodeEnum.ACCESS_TOKEN_INVALID)));
// return;
// }
// try {
// UserContext.setUser(userStr);
// DataSourceHelper.changeToMy();
// filterChain.doFilter(servletRequest, servletResponse);
// } finally {
// UserContext.removeUser();
// }
filterChain.doFilter(servletRequest, servletResponse);
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest reqs = (HttpServletRequest) servletRequest;
String uri = reqs.getRequestURI();
String method = reqs.getMethod();
String userStr = "";
CurrentUser currentUser = null;
boolean isInWhiteList = excludePath(uri);
String accessToken = reqs.getHeader("accessToken");
String key = "access_token:" + accessToken;
if(StringUtils.isNotBlank(accessToken)){
userStr = redisUtilPool.getString(key);
if(StringUtils.isNotBlank(userStr)){
currentUser = JSON.parseObject(userStr, CurrentUser.class);
}
}
log.info("url:{}", uri);
if ( !isInWhiteList && !method.equals("OPTIONS")) {
if (StringUtils.isEmpty(accessToken)) {
response.setStatus(HttpStatus.OK.value());
response.getWriter().write(JSON.toJSONString(
ResponseResult.fail(ErrorCodeEnum.ACCESS_TOKEN_INVALID)));
return;
}
if (Objects.isNull(currentUser)) {
response.setStatus(HttpStatus.OK.value());
response.getWriter().write(JSON.toJSONString(
ResponseResult.fail(ErrorCodeEnum.ACCESS_TOKEN_INVALID)));
return;
}
log.info("url:{}, access_token:{}, userId:{}, username:{}", uri, accessToken, currentUser.getUserId(), currentUser.getName());
}
if(StringUtils.isBlank(userStr) && !isInWhiteList){
response.setStatus(HttpStatus.OK.value());
response.getWriter().write(JSON.toJSONString(
ResponseResult.fail(ErrorCodeEnum.ACCESS_TOKEN_INVALID)));
return;
}
try {
CurrentUserContext.setUser(userStr);
filterChain.doFilter(servletRequest, servletResponse);
} finally {
CurrentUserContext.removeUser();
}
}
@Override

View File

@@ -58,28 +58,12 @@ public class Swagger2Config {
.globalOperationParameters(pars);
}
private Docket createDocketByPath (String groupName, String... paths){
List<Parameter> pars = getParameters();
return new Docket(DocumentationType.SWAGGER_2)
.enable(Boolean.TRUE)
.apiInfo(this.getApiInfo())
.groupName(groupName)
.select()
.paths(this.scanPath(paths))
.build()
.globalOperationParameters(pars);
}
private List<Parameter> getParameters() {
List<Parameter> pars = new ArrayList<>();
pars.add(new ParameterBuilder().name("accessToken").description("令牌").required(true)
.modelRef(new ModelRef("string"))
.defaultValue("{{accessToken}}")
.parameterType("query").build());
pars.add(new ParameterBuilder().name("enterpriseId").required(true)
.modelRef(new ModelRef("string"))
.defaultValue("45f92210375346858b6b6694967f44de")
.parameterType("path").build());
return pars;
}
@@ -94,17 +78,6 @@ public class Swagger2Config {
return predicate;
}
private Predicate<String> scanPath(final String... paths) {
Predicate<String> predicate = null;
for (String path : paths) {
if(StringUtils.isNotBlank(path)){
Predicate<String> tempPredicate = PathSelectors.ant(path);
predicate = predicate == null ? tempPredicate : Predicates.or(tempPredicate,predicate);
}
}
return predicate;
}
@Bean
public Docket allApi() {

View File

@@ -1,18 +1,10 @@
package com.cool.store.controller;
import com.cool.store.dto.enterprise.EnterpriseUserDTO;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.EnterpriseUserService;
import com.cool.store.utils.DataSourceHelper;
import com.cool.store.vo.buser.EnterpriseUserPageVO;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* @author zhangchenbiao

View File

@@ -1,16 +1,18 @@
package com.cool.store.controller;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.context.CurrentUserContext;
import com.cool.store.dto.login.FeiShuLoginDTO;
import com.cool.store.dto.login.UserIdInfoDTO;
import com.cool.store.enums.AppTypeEnum;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.http.ISVHttpRequest;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.LoginService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@@ -34,7 +36,7 @@ public class LoginController {
@PostMapping(value = "/feiShuLogin")
public Object feiShuLogin(@RequestBody FeiShuLoginDTO param) {
public ResponseResult feiShuLogin(@RequestBody FeiShuLoginDTO param) {
log.info("feiShuLogin data={}", JSONObject.toJSONString(param));
String code = param.getCode();
try {
@@ -45,7 +47,7 @@ public class LoginController {
}
log.info("userInfo:{}", JSONObject.toJSONString(userInfo));
String userId = userInfo.getOpenId();
return loginService.feiShuLogin(userId, Boolean.TRUE, StringUtils.EMPTY);
return ResponseResult.success(loginService.feiShuLogin(userId, Boolean.TRUE, StringUtils.EMPTY));
} catch (ServiceException e) {
log.error(e.getMessage(), e);
throw new ServiceException(ErrorCodeEnum.LOGIN_ERROR);
@@ -55,4 +57,9 @@ public class LoginController {
}
}
@GetMapping("/getUserInfoByToken")
public ResponseResult getUserInfoByToken(){
return ResponseResult.success(CurrentUserContext.getUser());
}
}

View File

@@ -0,0 +1,27 @@
package com.cool.store.controller;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.MenuService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author zhangchenbiao
* @FileName: MenuController
* @Description:
* @date 2023-06-08 16:58
*/
@RestController
public class MenuController {
@Resource
private MenuService menuService;
@GetMapping("/menu/getUserMenus")
public ResponseResult getUserMenus(){
return ResponseResult.success(menuService.getUserMenus(null));
}
}

View File

@@ -34,13 +34,15 @@ public class OssClientController {
private String endpoint;
@Value("${oss.bucket:null}")
private String bucket;
@Value("${corp.id:null}")
private String corpId;
@GetMapping("/getUploadFileConfig")
public ResponseResult getUploadFileConfig(@RequestParam("enterpriseId")String enterpriseId){
public ResponseResult getUploadFileConfig(){
// host的格式为 bucketname.endpoint
String host = "http://" + bucket + "." + endpoint;
// 用户上传文件时指定的前缀。
String dir = "partner/" + enterpriseId + "/";
String dir = "partner/" + corpId + "/";
OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);
try {

View File

@@ -42,4 +42,9 @@ rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-in
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message
default.database.name=coolcollege_intelligent_hy
#oss配置
oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740

View File

@@ -42,4 +42,9 @@ rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-in
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message
default.database.name=coolcollege_intelligent_hy
#oss配置
oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740

View File

@@ -40,4 +40,11 @@ rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX5N7rwl.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message
rocketmq.orderTopic=order_message
#oss配置
oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740

View File

@@ -50,5 +50,4 @@ oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
default.database.name=coolcollege_intelligent_hy
corp.id = 171cddee76471740

View File

@@ -40,4 +40,11 @@ rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX5N7rwl.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message
rocketmq.orderTopic=order_message
#oss配置
oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740

View File

@@ -40,4 +40,11 @@ rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX5N7rwl.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message
rocketmq.orderTopic=order_message
#oss配置
oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740

View File

@@ -42,4 +42,9 @@ rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-in
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message
default.database.name=coolcollege_intelligent_hy
#oss配置
oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3
oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS
oss.endpoint=oss-cn-shanghai.aliyuncs.com
oss.bucket=vec-coolstore
corp.id = 171cddee76471740