文章目录
- Spring Cloud Alibaba Gateway验证token
- 在前篇的基础上加入依赖
- 在filter包中创建tokenFilter
- Spring Cloud Alibaba Gateway局部过滤
- 1.继承AbstractGatewayFilterFactory
- 2.仿照AddRequestHeaderGatewayFilterFactory
Spring Cloud Alibaba Gateway验证token
基础搭建
前篇
在前篇的基础上加入依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.18</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
在filter包中创建tokenFilter
@Component
@Slf4j
public class TokenFilter implements GlobalFilter, Ordered {
@Value("${token.key}")
private String tokenKey;
private static final String TOKEN = "token";
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//生成一个token
/* Map<String, Object> map = new HashMap<>();
map.put("id", 100);
map.put("nickName", "张三");
map.put("tel", "10086");
map.put(JWT.EXPIRES_AT, System.currentTimeMillis() + 2 * 24 * 6 * 6 * 1000);
String token1 = JWTUtil.createToken(map, tokenKey.getBytes());*/
List<String> strings = exchange.getRequest().getHeaders().get(TOKEN);
ServerHttpResponse response = exchange.getResponse();
if (ObjectUtil.isEmpty(strings)) {
log.debug("token为空,不予通行");
response.setStatusCode(HttpStatus.UNAUTHORIZED);
return response.setComplete();
}
String token = strings.get(0);
boolean verify = false;
try {
verify = JWTUtil.verify(token, tokenKey.getBytes(StandardCharsets.UTF_8));
} catch (Exception ex) {
log.error("出现错误{}", ex.getMessage());
ex.printStackTrace();
}
if (!verify) {
log.error("token不对,不要投机取巧");
response.setStatusCode(HttpStatus.UNAUTHORIZED);
return response.setComplete();
}
JWTPayload payload = JWTUtil.parseToken(token).getPayload();
log.info("通过,大大滴好!!");
return chain.filter(exchange);
}
//配置第一顺位执行
@Override
public int getOrder() {
return 1;
}
}
自行访问
Spring Cloud Alibaba Gateway局部过滤
1.继承AbstractGatewayFilterFactory
加入配置
spring.cloud.gateway.routes[0].filters[4] = LogTime=50
- 这里配置的LogTime 与 类名前面的对应
- AbstractNameValueGatewayFilterFactory可以仿照这个类写 进入ieda 两下shift
@Component
@Slf4j
public class LogTimeGatewayFilterFactory extends AbstractGatewayFilterFactory<LogTimeGatewayFilterFactory.Config> {
private String TIMESPAN = "timeSpan";
public LogTimeGatewayFilterFactory() {
super(LogTimeGatewayFilterFactory.Config.class);
}
public List<String> shortcutFieldOrder() {
return Arrays.asList(TIMESPAN);
}
@Override
public GatewayFilter apply(Config config) {
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange,GatewayFilterChain chain) {
long start = System.currentTimeMillis();
exchange.getAttributes().put("start", start);
return chain.filter(exchange).then(Mono.fromRunnable(()->{
long end = System.currentTimeMillis();
long start1 = exchange.getAttribute("start");
HttpRequest request = exchange.getRequest();
URI uri = request.getURI();
if(config.timeSpan > (end - start1)){
log.info("uri伟{}不错!{}在50ms之内",uri,end - start1);
}
log.info("uri伟{}不行!太慢啦{}",uri,end - start1);
}));
}
};
}
@Validated
//启用参数验证似乎
public static class Config{
private int timeSpan;
public int getTimeSpan() {
return timeSpan;
}
public void setTimeSpan(int timeSpan) {
this.timeSpan = timeSpan;
}
}
}
2.仿照AddRequestHeaderGatewayFilterFactory
继承AbstractNameValueGatewayFilterFactory
@Component
@Slf4j
public class LogTime2GatewayFilterFactory extends AbstractNameValueGatewayFilterFactory{
public LogTime2GatewayFilterFactory() {
}
public GatewayFilter apply(final AbstractNameValueGatewayFilterFactory.NameValueConfig config) {
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange,GatewayFilterChain chain) {
long start = System.currentTimeMillis();
exchange.getAttributes().put("start", start);
return chain.filter(exchange).then(Mono.fromRunnable(()->{
long end = System.currentTimeMillis();
long start1 = exchange.getAttribute("start");
HttpRequest request = exchange.getRequest();
URI uri = request.getURI();
if(Integer.parseInt(config.getValue()) > (end - start1)){
log.info("logTime2 uri伟{}不错!{}在50ms之内",uri,end - start1);
}
log.info("logTime2 uri伟{}不行!太慢啦{}",uri,end - start1);
}));
}
public String toString() {
return GatewayToStringStyler.filterToStringCreator(LogTime2GatewayFilterFactory.this).append(config.getName(), config.getValue()).toString();
}
};
}
}
证明参数注入成功