提交 084a6d72 authored 作者: 000516's avatar 000516 提交者: Coding

登录token与链路中心打通

Merge Request: 登录token与链路中心打通 Created By: @李秋林 Accepted By: @李秋林 URL: https://g-pkkp8204.coding.net/p/promotion/d/promotion-gateway/git/merge/208?initial=true
...@@ -2,11 +2,27 @@ ...@@ -2,11 +2,27 @@
2、更新common代码、打包、更新依赖 2、更新common代码、打包、更新依赖
3、刷新依赖并打jar包,然后build镜像 3、刷新依赖并打jar包,然后build镜像
docker build -t promotion-gateway:latest . mvn package -DskipTests
docker stop promotion-gateway-020 && docker rm promotion-gateway-020
docker rmi promotion-gateway-020
docker build -t promotion-gateway:0.2.0 .
Live启动:
docker run -d -p 8010:8010 --name promotion-gateway \ docker run -d -p 8010:8010 --name promotion-gateway \
-v /var/logs/promotion-gateway/:/var/logs/promotion-gateway/ \ -v /var/logs/promotion-gateway/:/var/logs/promotion-gateway/ \
--restart=always \ --restart=always \
--network host \ --network host \
promotion-gateway:latest promotion-gateway:0.2.0
QA启动:
docker run -d -p 8010:8010 --name promotion-gateway-020 \
-v /var/logs/promotion-gateway/:/var/logs/promotion-gateway/ \
--restart=always \
--network host \
promotion-gateway:0.2.0 \
--spring.profiles.active=qa
...@@ -5,13 +5,13 @@ ...@@ -5,13 +5,13 @@
<parent> <parent>
<groupId>com.wangxiaolu</groupId> <groupId>com.wangxiaolu</groupId>
<artifactId>wangxiaolu-promotion-parent</artifactId> <artifactId>wangxiaolu-promotion-parent</artifactId>
<version>0.0.1</version> <version>0.0.3</version>
</parent> </parent>
<groupId>com.wangxiaolu</groupId> <groupId>com.wangxiaolu</groupId>
<artifactId>wangxiaolu-promotion-gateway</artifactId> <artifactId>wangxiaolu-promotion-gateway</artifactId>
<version>0.0.1</version> <version>0.2.0</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>wangxiaolu-promotion-gateway</name> <name>wangxiaolu-promotion-gateway</name>
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<dependency> <dependency>
<groupId>com.wangxiaolu</groupId> <groupId>com.wangxiaolu</groupId>
<artifactId>wangxiaolu-promotion-common</artifactId> <artifactId>wangxiaolu-promotion-common</artifactId>
<version>0.0.2</version> <version>0.0.3</version>
</dependency> </dependency>
<dependency> <dependency>
......
...@@ -9,4 +9,6 @@ import com.alibaba.fastjson.JSONObject; ...@@ -9,4 +9,6 @@ import com.alibaba.fastjson.JSONObject;
*/ */
public interface UserDataService { public interface UserDataService {
JSONObject getUserByToken(String token); JSONObject getUserByToken(String token);
boolean hasKeyToken(String tokenKey);
} }
...@@ -2,6 +2,7 @@ package com.promotion.gateway.data.impl; ...@@ -2,6 +2,7 @@ package com.promotion.gateway.data.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.promotion.gateway.data.UserDataService; import com.promotion.gateway.data.UserDataService;
import com.wangxiaolu.promotion.common.redis.RedisKeys;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
...@@ -26,4 +27,11 @@ public class UserDataServiceImpl implements UserDataService { ...@@ -26,4 +27,11 @@ public class UserDataServiceImpl implements UserDataService {
String val = vo.get(token); String val = vo.get(token);
return JSONObject.parseObject(val); return JSONObject.parseObject(val);
} }
@Override
public boolean hasKeyToken(String tokenKey) {
Boolean wb = redisTemplate.hasKey(RedisKeys.UserKeys.WXL_LINK_TOKEN.getKey() + tokenKey);
Boolean tb = redisTemplate.hasKey(RedisKeys.UserKeys.TEMPORARY_TOKEN.getKey() + tokenKey);
return wb || tb;
}
} }
package com.promotion.gateway.filter; package com.promotion.gateway.filter;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.promotion.gateway.data.UserDataService; import com.promotion.gateway.data.UserDataService;
import com.wangxiaolu.promotion.common.redis.RedisKeys; import com.wangxiaolu.promotion.common.util.JwtTokenUtils;
import com.wangxiaolu.promotion.result.basedata.R; import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.result.basedata.RCode; import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.result.basedata.StatusCode; import com.wangxiaolu.promotion.result.basedata.StatusCode;
import io.jsonwebtoken.Claims;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GatewayFilterChain;
...@@ -15,7 +15,6 @@ import org.springframework.cloud.gateway.filter.GlobalFilter; ...@@ -15,7 +15,6 @@ import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
...@@ -25,7 +24,6 @@ import reactor.core.publisher.Mono; ...@@ -25,7 +24,6 @@ import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* @author : liqiulin * @author : liqiulin
...@@ -40,10 +38,10 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered { ...@@ -40,10 +38,10 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered {
* 放行URL * 放行URL
* 用户注册、用户登录、发送手机号验证码 * 用户注册、用户登录、发送手机号验证码
*/ */
private final List<String> whiteUrls = Arrays.asList("/login", "/enroll", "/sms/send/ver_code"); private final List<String> whiteUrls = Arrays.asList("/login", "/enroll", "/sms/send/ver_code","/user/aliyun/signature","/wechat/miniapp/xlt");
@Autowired @Autowired
UserDataService userDataService; private UserDataService userDataService;
@Override @Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
...@@ -62,13 +60,25 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered { ...@@ -62,13 +60,25 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered {
} }
// 3、验证token // 3、验证token
JSONObject userJson = userDataService.getUserByToken(RedisKeys.UserKeys.TEMPORARY_TOKEN.getKey() + token); Claims claims = JwtTokenUtils.parseToken(token);
if (Objects.isNull(userJson)) { if (claims == null)
log.info("访问URL:{},token登录错误:{}", url,token); {
return loginError(exchange,RCode.NOT_LOGIN_TIMEOUT_ERROR); return loginError(exchange,RCode.NOT_LOGIN_TIMEOUT_ERROR);
} }
ServerHttpRequest httpRequest = exchange.getRequest().mutate().header("loginId", userJson.getString("id")).header("loginQcId", userJson.getString("qcId")).build(); String userkey = JwtTokenUtils.getUserKey(claims);
return chain.filter(exchange.mutate().request(httpRequest).build()); boolean islogin = userDataService.hasKeyToken(userkey);
if (!islogin)
{
return loginError(exchange,RCode.NOT_LOGIN_TIMEOUT_ERROR);
}
String userid = JwtTokenUtils.getUserId(claims);
String username = JwtTokenUtils.getUserName(claims);
if (StringUtils.isBlank(userid) || StringUtils.isBlank(username))
{
return loginError(exchange,RCode.NOT_LOGIN_TIMEOUT_ERROR);
}
return chain.filter(exchange);
} }
@Override @Override
......
spring: spring:
datasource: datasource:
driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://bj-cdb-j8ppdy86.sql.tencentcdb.com:63569/promotion_dev?autoReconnect=true url: jdbc:mysql://192.168.0.18:3306/promotion?autoReconnect=true
username: LnNDBM username: NvqGbJXH
password: fd0%bhD4@oO(% password: D9Y@FR,84B*$MD^A36&m
redis: redis:
port: 21101 port: 23385
host: bj-crs-oyzhz3c6.sql.tencentcdb.com host: 1.202.69.170
database: 0 database: 0
password: u)R3jrHk(qwt~mv$Tg=U password: QjL6H5nH
main: main:
web-application-type: reactive web-application-type: reactive
...@@ -16,8 +16,8 @@ spring: ...@@ -16,8 +16,8 @@ spring:
cloud: cloud:
nacos: nacos:
discovery: discovery:
server-addr: 42.193.103.153:8848 server-addr: 192.168.100.38:8848
namespace: dd681f3c-0d21-42e5-a96e-14863a7cdcdb namespace: 68c8d97c-715a-4983-99b7-9df9b99f89e7
group: promotion group: promotion
gateway: gateway:
......
...@@ -5,10 +5,10 @@ spring: ...@@ -5,10 +5,10 @@ spring:
username: LnNDBM username: LnNDBM
password: fd0%bhD4@oO(% password: fd0%bhD4@oO(%
redis: redis:
port: 7548 port: 23385
host: 192.168.0.11 host: 1.202.69.170
database: 1 database: 1
password: u)R3jrHk(qwt~mv$Tg=U password: QjL6H5nH
main: main:
web-application-type: reactive web-application-type: reactive
......
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.0.18:3306/promotion?autoReconnect=true
username: NvqGbJXH
password: D9Y@FR,84B*$MD^A36&m
redis:
port: 6379
host: 192.168.100.40
database: 0
password: QjL6H5nH
main:
web-application-type: reactive
cloud:
nacos:
discovery:
server-addr: 192.168.100.38:8848
namespace: 3b774c2d-b03b-4816-8fe8-a41f458ebbcc
group: promotion
gateway:
discovery:
locator:
enabled: true
routes:
- id: wangxiaolu-promotion-service
uri: lb://wangxiaolu-promotion-service
# uri: http://127.0.0.1:8011
predicates:
- Path=/**
logging:
config: classpath:logback-spring.xml
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论