1. 新增小程序码和小程序二维码接口
2. 优化gateway中oauth2异常时跨域处理
This commit is contained in:
parent
4fadcb5b8e
commit
7d12de1fe6
@ -33,6 +33,12 @@
|
||||
<artifactId>common-redis</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<!-- openfein -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-openfeign</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
|
||||
@ -5,12 +5,14 @@ import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
|
||||
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
|
||||
@EnableDiscoveryClient
|
||||
@ComponentScan("com.evotech.hd.**")
|
||||
@MapperScan({"com.evotech.hd.cloud.dao.**", "com.evotech.hd.common.core.dao.**"})
|
||||
@EnableFeignClients
|
||||
public class CloudManageServerApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
@ -22,6 +22,7 @@ import io.swagger.v3.oas.annotations.Hidden;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
|
||||
@ -76,6 +77,22 @@ public class BatteryStationController {
|
||||
public Result<Map<String, String>> RsaSecretKey(@NotBlank @RequestParam String stationCode) {
|
||||
return batteryStationService.RsaSecretKey(stationCode);
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "获取小程序码")
|
||||
@GetMapping("/xcx/qrcode/get")
|
||||
@ApiOperationSupport(order = 6)
|
||||
public void getQRCode2(String path, @RequestParam(required = false) String width, @RequestParam(required = false)String env_version, HttpServletResponse response) {
|
||||
batteryStationService.getQRCode2(path, width, env_version, response);
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "获取小程序二维码")
|
||||
@GetMapping("/xcx/qrcode/create")
|
||||
@ApiOperationSupport(order = 7)
|
||||
public void createQRCode2(String path, @RequestParam(required = false) String width, HttpServletResponse response) {
|
||||
batteryStationService.createQRCode2(path, width, response);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -8,6 +8,8 @@ import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
|
||||
import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO;
|
||||
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
public interface BatteryStationService {
|
||||
|
||||
public Result<Integer> add(BatteryStation bs);
|
||||
@ -21,5 +23,9 @@ public interface BatteryStationService {
|
||||
public Result<List<BatteryStationVO>> listStation(String plateNum);
|
||||
|
||||
public Result<Map<String, String>> RsaSecretKey(String stationCode);
|
||||
|
||||
public void getQRCode2(String path, String width, String env_version, HttpServletResponse response);
|
||||
|
||||
public void createQRCode2(String path, String width, HttpServletResponse response);
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
package com.evotech.hd.cloud.service.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.security.KeyPair;
|
||||
import java.util.Base64;
|
||||
import java.util.Date;
|
||||
@ -8,6 +11,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
@ -19,6 +23,7 @@ import com.evotech.hd.cloud.dao.BatteryStationSecretKeyDao;
|
||||
import com.evotech.hd.cloud.dao.VehicleInfoDao;
|
||||
import com.evotech.hd.cloud.entity.BatteryStationSecretKey;
|
||||
import com.evotech.hd.cloud.entity.request.PageListBatteryStationRequest;
|
||||
import com.evotech.hd.cloud.rpc.WechatService;
|
||||
import com.evotech.hd.cloud.service.BatteryStationService;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
|
||||
@ -26,9 +31,14 @@ import com.evotech.hd.common.core.entity.cloud.VehicleInfo;
|
||||
import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO;
|
||||
import com.evotech.hd.common.core.enums.CodeMsg;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.crypto.KeyUtil;
|
||||
import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.ServletOutputStream;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
@Service
|
||||
public class BatteryStationServiceImpl implements BatteryStationService {
|
||||
@ -39,6 +49,8 @@ public class BatteryStationServiceImpl implements BatteryStationService {
|
||||
private BatteryStationSecretKeyDao batteryStationSecretKeyDao;
|
||||
@Resource
|
||||
private VehicleInfoDao vehicleInfoDao;
|
||||
@Resource
|
||||
private WechatService wechatService;
|
||||
|
||||
@Override
|
||||
public Result<Integer> add(BatteryStation bs) {
|
||||
@ -152,4 +164,54 @@ public class BatteryStationServiceImpl implements BatteryStationService {
|
||||
return new Result<List<BatteryStationVO>>().success(res);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getQRCode2(String path, String width, String env_version, HttpServletResponse response) {
|
||||
String qrCode2Str = wechatService.getQRCode2(path, width, env_version);
|
||||
byte[] res = Base64.getDecoder().decode(qrCode2Str);
|
||||
String fileName = "小程序码" + DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN) + ".png";
|
||||
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||
try {
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
ServletOutputStream out = null;
|
||||
try {
|
||||
out = response.getOutputStream();
|
||||
out.write(res);
|
||||
out.flush();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
IoUtil.close(out);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createQRCode2(String path, String width, HttpServletResponse response) {
|
||||
String qrCode2Str = wechatService.createQRCode2(path, width);
|
||||
byte[] res = Base64.getDecoder().decode(qrCode2Str);
|
||||
String fileName = "小程序二维码" + DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN) + ".png";
|
||||
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||
try {
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
ServletOutputStream out = null;
|
||||
try {
|
||||
out = response.getOutputStream();
|
||||
out.write(res);
|
||||
out.flush();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
IoUtil.close(out);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
package com.evotech.hd.gateway.oauth2;
|
||||
|
||||
import java.net.URI;
|
||||
import java.nio.charset.Charset;
|
||||
import org.springframework.core.io.buffer.DataBuffer;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
@ -40,12 +39,15 @@ public class MyAuthenticationEntryPoint implements ServerAuthenticationEntryPoin
|
||||
|
||||
@Override
|
||||
public Mono<Void> commence(ServerWebExchange exchange, AuthenticationException e) {
|
||||
// System.out.println("0999990000");
|
||||
e.printStackTrace();
|
||||
ServerHttpResponse response = exchange.getResponse();
|
||||
Throwable cause = e.getCause();
|
||||
Result<String> res = new Result<String>().exception(e.getMessage());
|
||||
// System.out.println("00");
|
||||
try {
|
||||
if (cause instanceof JwtValidationException) {
|
||||
// System.out.println("11");
|
||||
if (cause.getMessage().contains("Jwt expired at")) {
|
||||
String token = exchange.getRequest().getHeaders().getFirst("Authorization").substring(7);
|
||||
String dateTime = DateUtil.formatDateTime(TokenUtil.getExp(token));
|
||||
@ -54,8 +56,10 @@ public class MyAuthenticationEntryPoint implements ServerAuthenticationEntryPoin
|
||||
res = new Result<String>().error(CodeMsg.TOKEN_INVALID.getCode(), CodeMsg.TOKEN_INVALID.getMsg(), cause.getMessage());
|
||||
}
|
||||
} else if (cause instanceof BadJwtException || cause instanceof JwtEncodingException) {
|
||||
// System.out.println("22");
|
||||
res = new Result<String>().error(CodeMsg.TOKEN_INVALID.getCode(), CodeMsg.TOKEN_INVALID.getMsg(), cause.getMessage());
|
||||
} else if (cause instanceof InvalidBearerTokenException) {
|
||||
// System.out.println("33");
|
||||
String token = exchange.getRequest().getHeaders().getFirst("Authorization").substring(7);
|
||||
String dateTime = DateUtil.formatDateTime(TokenUtil.getExp(token));
|
||||
res = new Result<String>().bussinessException(CodeMsg.TOKEN_EXPIRED.getCode(), CodeMsg.TOKEN_EXPIRED.getMsg(), "Jwt expired at " + dateTime);
|
||||
@ -63,19 +67,22 @@ public class MyAuthenticationEntryPoint implements ServerAuthenticationEntryPoin
|
||||
res = new Result<String>().error(CodeMsg.AUTHENTICATION_FAILED.getCode(), CodeMsg.AUTHENTICATION_FAILED.getMsg(), e.getMessage());
|
||||
}
|
||||
} catch (Exception e1) {
|
||||
// System.out.println("99");
|
||||
log.info(e1.toString());
|
||||
res = new Result<String>().error(CodeMsg.AUTHENTICATION_FAILED.getCode(), CodeMsg.AUTHENTICATION_FAILED.getMsg(), e.getMessage());
|
||||
}
|
||||
// System.out.println("100");
|
||||
response.setStatusCode(HttpStatus.OK);
|
||||
response.getHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
|
||||
URI uri = exchange.getRequest().getURI();
|
||||
// 为了解决token过期时,前端不出现跨域错误,添加了一些header,注意Access-Control-Allow-Origin的值
|
||||
response.getHeaders().add("Access-Control-Allow-Origin", uri.getScheme() + "://" + uri.getHost());
|
||||
// URI uri = exchange.getRequest().getURI();
|
||||
// 为了解决token过期时,前端不出现跨域错误,添加了一些header,注意Access-Control-Allow-Origin的值: uri.getScheme() + "://" + uri.getHost()
|
||||
response.getHeaders().add("Access-Control-Allow-Origin", "*");
|
||||
response.getHeaders().add("Access-Control-Allow-Credentials", "true");
|
||||
response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
|
||||
response.getHeaders().add("Access-Control-Allow-Headers", HttpHeaders.AUTHORIZATION);
|
||||
String body = JSONUtil.toJsonStr(res);
|
||||
DataBuffer buffer = response.bufferFactory().wrap(body.getBytes(Charset.forName("UTF-8")));
|
||||
// System.out.println("200");
|
||||
return response.writeWith(Mono.just(buffer));
|
||||
}
|
||||
|
||||
|
||||
@ -51,6 +51,7 @@ public class GlobalExceptionHandler extends DefaultErrorWebExceptionHandler {
|
||||
protected Mono<ServerResponse> renderErrorResponse(ServerRequest request) {
|
||||
// Map<String, Object> error = getErrorAttributes(request, getErrorAttributeOptions(request, MediaType.ALL));
|
||||
Throwable throwable = getError(request);
|
||||
System.out.println("1111666");
|
||||
return ServerResponse
|
||||
// .status(super.getHttpStatus(error))
|
||||
.status(HttpStatus.OK)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user