main
黄海 11 months ago
parent 8062559835
commit 7b6fd824f7

@ -15,15 +15,14 @@ import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication @SpringBootApplication
@RestController @RestController
@EnableZuulProxy @EnableZuulProxy
// Zuul网关 @EnableZuulProxy 和 @EnableZuulServer 的区别
// https://www.cnblogs.com/c2g5201314/p/12993753.html
public class GwApplication { public class GwApplication {
@Autowired @Autowired
private Environment environment; private Environment environment;
@RequestMapping("/") @RequestMapping("/")
public String index() { public String index() {
return "当前配置文件环境为:" + environment.getActiveProfiles()[0] + ", Hello, gw-charge!!!"; return "当前配置文件环境为:" + environment.getActiveProfiles()[0] + ", Hello, gw-exam!";
} }
public static void main(String[] args) { public static void main(String[] args) {

@ -14,8 +14,6 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration @Configuration
@EnableCaching //启用缓存,这个注解很重要; @EnableCaching //启用缓存,这个注解很重要;
public class RedisCacheConfig extends CachingConfigurerSupport { public class RedisCacheConfig extends CachingConfigurerSupport {
/** /**
* . * .
*/ */

@ -6,13 +6,10 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
//SpringBoot系列教程web篇之过滤器Filter使用指南
//https://blog.csdn.net/cxyxysam/article/details/135483785
@WebFilter(urlPatterns = "/*") @WebFilter(urlPatterns = "/*")
public class CorsFilter implements Filter { public class CorsFilter implements Filter {
@Override @Override
public void init(FilterConfig filterConfig) throws ServletException { public void init(FilterConfig filterConfig) {
// TODO Auto-generated method stub
} }
@Override @Override
@ -20,8 +17,6 @@ public class CorsFilter implements Filter {
FilterChain chain) throws IOException, ServletException { FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res; HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req; HttpServletRequest request = (HttpServletRequest) req;
String uri = request.getRequestURI();
request.getServerName();
response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Max-Age", "3600");
@ -35,6 +30,5 @@ public class CorsFilter implements Filter {
@Override @Override
public void destroy() { public void destroy() {
// TODO Auto-generated method stub
} }
} }

@ -32,7 +32,7 @@ public class ZuulPreFilter extends ZuulFilter {
private static final Logger logger = LoggerFactory.getLogger(ZuulPreFilter.class); private static final Logger logger = LoggerFactory.getLogger(ZuulPreFilter.class);
//jwt的密匙
@Value("${jwt.secret}") @Value("${jwt.secret}")
private String secret; private String secret;
@ -42,8 +42,10 @@ public class ZuulPreFilter extends ZuulFilter {
@Autowired @Autowired
private AsyncTask asyncTask; private AsyncTask asyncTask;
//白名单
List<String> should_not_filter = new ArrayList<>(); List<String> should_not_filter = new ArrayList<>();
//黑名单
List<String> no_access_filter = new ArrayList<>(); List<String> no_access_filter = new ArrayList<>();
public List<String> getNo_access_filter() { public List<String> getNo_access_filter() {
@ -58,7 +60,6 @@ public class ZuulPreFilter extends ZuulFilter {
return should_not_filter; return should_not_filter;
} }
public void setShould_not_filter(List<String> should_not_filter) { public void setShould_not_filter(List<String> should_not_filter) {
this.should_not_filter = should_not_filter; this.should_not_filter = should_not_filter;
} }
@ -111,7 +112,7 @@ public class ZuulPreFilter extends ZuulFilter {
ctx.getResponse().setStatus(HttpServletResponse.SC_OK); ctx.getResponse().setStatus(HttpServletResponse.SC_OK);
return ctx.getResponse(); return ctx.getResponse();
} }
if (Authorization == null || Authorization.length() == 0) { if (Authorization == null || Authorization.isEmpty()) {
ctx.setSendZuulResponse(false); ctx.setSendZuulResponse(false);
ctx.setResponseBody("{\"msg\":\"凭证过期\" ,\"code\":1002}"); ctx.setResponseBody("{\"msg\":\"凭证过期\" ,\"code\":1002}");
ctx.getResponse().setContentType("text/json; charset=utf-8"); ctx.getResponse().setContentType("text/json; charset=utf-8");
@ -120,8 +121,6 @@ public class ZuulPreFilter extends ZuulFilter {
} }
String token = Authorization.replaceFirst(JwtUtil.AUTHORIZATION_STARTER, ""); String token = Authorization.replaceFirst(JwtUtil.AUTHORIZATION_STARTER, "");
Claims cs; Claims cs;
try { try {
//JAVA加密的我尝试解析一下 //JAVA加密的我尝试解析一下
@ -152,9 +151,8 @@ public class ZuulPreFilter extends ZuulFilter {
String phone = (String) cs.get(JwtUtil.CLAIM_KEY_PHONE); String phone = (String) cs.get(JwtUtil.CLAIM_KEY_PHONE);
String type = (String) cs.get(JwtUtil.CLAIM_KEY_TYPE); String type = (String) cs.get(JwtUtil.CLAIM_KEY_TYPE);
//验证数据是否过期 //验证数据是否过期
String tokenkey = ""; String tokenkey;
if (StringUtils.isEmpty(type)) { if (StringUtils.isEmpty(type)) {
tokenkey = TokenService.ONLINE_USER + userId + phone; tokenkey = TokenService.ONLINE_USER + userId + phone;
} else { } else {
@ -170,7 +168,7 @@ public class ZuulPreFilter extends ZuulFilter {
return ctx.getResponse(); return ctx.getResponse();
} else { } else {
if (checkToken.equals(Authorization)) { if (checkToken.equals(Authorization)) {
// tokenService.freshTime(TokenService.ONLINE_USER+userId); tokenService.freshTime(TokenService.ONLINE_USER + userId);
} else { } else {
ctx.setSendZuulResponse(false); ctx.setSendZuulResponse(false);
ctx.setResponseBody("{\"msg\":\"凭证过期请重新登录\" ,\"code\":1002}"); ctx.setResponseBody("{\"msg\":\"凭证过期请重新登录\" ,\"code\":1002}");

@ -85,6 +85,4 @@ public class I100cResponse {
res.setMsg(msg); res.setMsg(msg);
return general(res); return general(res);
} }
} }

@ -4,6 +4,7 @@ import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.SignatureAlgorithm;
import java.nio.charset.StandardCharsets;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -57,7 +58,7 @@ public class JwtUtil {
return Jwts.builder() return Jwts.builder()
.setClaims(claims) .setClaims(claims)
// .setExpiration(date) // .setExpiration(date)
.signWith(SignatureAlgorithm.HS512, secret) //采用什么算法是可以自己选择的不一定非要采用HS512 .signWith(SignatureAlgorithm.HS256, secret) //采用什么算法是可以自己选择的不一定非要采用HS512
.compact(); .compact();
} }
@ -68,7 +69,7 @@ public class JwtUtil {
return Jwts.builder() return Jwts.builder()
.setClaims(claims) .setClaims(claims)
.setExpiration(date) .setExpiration(date)
.signWith(SignatureAlgorithm.HS512, secret) //采用什么算法是可以自己选择的不一定非要采用HS512 .signWith(SignatureAlgorithm.HS256, secret) //采用什么算法是可以自己选择的不一定非要采用HS512
.compact(); .compact();
} }
public static Claims getClaimsFromToken(String token, String secret) { public static Claims getClaimsFromToken(String token, String secret) {
@ -79,7 +80,15 @@ public class JwtUtil {
.parseClaimsJws(token) .parseClaimsJws(token)
.getBody(); .getBody();
} catch (Exception e) { } catch (Exception e) {
claims = null; try {
//NODEJS加密的我尝试解析一下
claims = Jwts.parser()
.setSigningKey(secret.getBytes(StandardCharsets.UTF_8))
.parseClaimsJws(token)
.getBody();
} catch (Exception err) {
claims = null;
}
} }
return claims; return claims;
} }

@ -4,108 +4,10 @@ jwt:
filter: filter:
should_not_filter: should_not_filter:
- /gw/login - /gw/login
- /userapi/getOpenId
- /userapi/weChatAuth
- /userapi/mobileLogin
- /userapi/sendMs
- /financeapi/wxSmallApp/wxSmallAppPayNotice
- /stationapi/station/queryNearbyStation
- /stationapi/station/queryNearbyStationMapMode
- /stationapi/station/queryYiXingWebsiteStationInfo
- /stationapi/station/identifyQR/PfV6GsETrX.txt
- /stationapi/station/PfV6GsETrX.txt
- /stationapi/station/queryStationList
- /stationapi/station/queryStationOperator
- /noticeapi/park/parkCoupon
- /userapi/getChewei
- /cheweiapi
- /financeapi/alipay/aliPayNotice
- /financeapi/alipay/aliPayNoticeFromSmallApp
- /financeapi/wxpay/wxAppPayNotice
- /financeapi/alipay/aliPayNoticeByCharge
- /userapi/wxLogin
- /userapi/forgetPW
- /userapi/loginByPW
- /userapi/getAccessToken
- /userapi/appWxLogin
- /userapi/getDictByKey
- /userapi/adPage/queryAdPage
- /userapi/appVersion/*
- /userapi/weChat/*
- /userapi/redPacket/getRedPacketDrawRecord
- /userapi/h5/*
- /userapi/groundLockStatus
- /userapi/getDictByKey
- /orderapi/inspectionReport/queryOrder
- /orderapi/inspectionReport/queryUserInfo
- /orderapi/inspectionReport/notificationShallowReport
- /orderapi/inspectionReport/notificationDeepReport
- /openapi/lock/queryConnectorId
- /openapi/lock/queryParkingLock
- /ZhuQue/*
- /userapi/userCard/searchCard
- /orderbkapi/station/querySaasStationIdsInfo
- /orderbkapi/station/querySaasConnectorIdsInfo
- /orderbkapi/saas/chargeorder/saasChargeOrderPageInfo
- /orderbkapi/station/querySaasEquipmentIdsInfo
zuul: zuul:
#路径配置 #路径配置
routes: routes:
# 1、用户模块
# UserInfoController
# @RequestMapping("/userapi/user")
userapi:
stripPrefix: false
path: /userapi/** # 所有匹配/usrerapi/**的路径将被路由到/userapi/**
# sensitiveHeaders是黑名单且默认不为空。 因此要使Zuul发送所有标头忽略的标头除外您必须将其明确设置为空列表。 如果要将cookie或授权标头传递到后端则必须这样做。
sensitiveHeaders:
#2、财务模块
financeapi:
stripPrefix: true
path: /financeapi/**
sensitiveHeaders:
#3、充电站模块
stationapi:
stripPrefix: true
path: /stationapi/**
sensitiveHeaders:
#4、订单模块
orderapi:
stripPrefix: false
path: /orderapi/**
sensitiveHeaders:
#5、互联互通模块
openapi:
stripPrefix: true
path: /openapi/**
sensitiveHeaders:
#6、订单后台模块
orderbkapi:
stripPrefix: false
path: /orderbkapi/**
sensitiveHeaders:
#7、协议模块 【这个为什么没有路由地址指向呢?】
protocolapi:
stripPrefix: false
path: /protocolapi/**
sensitiveHeaders:
#8、分发模块
distribute:
stripPrefix: false
path: /distribute/**
sensitiveHeaders:
#9、通知模块
noticeapi:
stripPrefix: false
path: /noticeapi/**
sensitiveHeaders:
#10、通知模块
cheweiapi:
stripPrefix: false
path: /cheweiapi/**
sensitiveHeaders:
#11、黄海自己扩展的模块,后续所有的JAVA接口全部增加到这个路径下 #11、黄海自己扩展的模块,后续所有的JAVA接口全部增加到这个路径下
ZhuQue: ZhuQue:
stripPrefix: false stripPrefix: false
@ -119,82 +21,6 @@ ZhuQue:
listOfServers: http://zhu-que:9000 listOfServers: http://zhu-que:9000
# 用户模块
userapi:
ribbon:
listOfServers: http://ms-user:7022
# 订单后台模块
orderbkapi:
ribbon:
listOfServers: http://ms-admin:7011
#分发模块
distribute:
ribbon:
listOfServers: http://ms-distribute:7012
# 财务模块
financeapi:
ribbon:
listOfServers: http://ms-finance:7014
# 充电站模块
stationapi:
ribbon:
listOfServers: http://ms-station:7020
# 协议模块
protocolapi:
ribbon:
listOfServers: http://ms-protocol:7024
# 通知模块
cheweiapi:
ribbon:
listOfServers: http://cz.api.cheweiguanjia.com
# 互联互通模块
openapi:
ribbon:
listOfServers: http://ms-openapi:7016
# 通知模块
noticeapi:
ribbon:
listOfServers: http://i100c.3322.org:30745
# 订单模块
orderapi:
ribbon:
listOfServers: http://ms-order:7017
#protocolshenghongapi:
# ribbon:
# listOfServers: http://i100c.3322.org:31766
taskapi:
ribbon:
listOfServers: http://ms-task:7021
#walletapi:
# ribbon:
# listOfServers: http://i100c.3322.org:30723
#websocketocppapi:
# ribbon:
# listOfServers: http://i100c.3322.org:30725
#mgrapi:
# ribbon:
# listOfServers: http://ms-saas-mgr:7026
#excelapi:
# ribbon:
# listOfServers: http://i100c.3322.org:30326
ribbon: #负载均衡 ribbon: #负载均衡
eureka: eureka:
enabled: false #禁用eureka不依赖 eureka enabled: false #禁用eureka不依赖 eureka
@ -227,20 +53,6 @@ spring:
max-idle: 8 max-idle: 8
min-idle: 0 min-idle: 0
# Dinger(叮鸽)基于springboot实现的群机器人消息发送中间件入门使用
# https://blog.51cto.com/u_15891990/5908802
dinger:
project-id: ${spring.application.name}-${spring.profiles.active}
dingers:
# 使用钉钉机器人, 请根据自己机器人配置信息进行修改
dingtalk:
# tokenId是创建机器人的webhook
tokenId: ad3700d79705ea1502e57c5fa170fda23d5c6502f3d0410a66dbc2a8e1d06986
# secret是创建机器人的加签
secret: SEC167efa8be3412d3b9dbf87286d9b837836aabd79cf20f9966001333a287a39a5

@ -216,14 +216,3 @@ spring:
max-active: 8 max-active: 8
max-idle: 8 max-idle: 8
min-idle: 0 min-idle: 0
dinger:
project-id: ${spring.application.name}-${spring.profiles.active}
dingers:
# 使用钉钉机器人, 请根据自己机器人配置信息进行修改
dingtalk:
# tokenId是创建机器人的webhook
tokenId: 6c0cd9de94359329fe166dfefe39da0d8d3fba59211dfdc64d8aba1d1acd89fb
# secret是创建机器人的加签
secret: SEC9e3b8638d5670215e966efc891be4c7d83c09dd8f032df7ca84972a2661effb7
Loading…
Cancel
Save