Spring Cloud Gateway使用Token验证详解

网友投稿 256 2023-07-09

Spring Cloud Gateway使用Token验证详解

引入依赖

org.springframework.cloud

spring-cloud-dependencies

${spring-cloud.version}

pom

import

org.springframework.cloud

spring-cloud-starter-gateway

自定义过滤器

可以继承 AbstractGatewayFilterFactory 或实现 GlobalFilter 实现过滤请求功能

GatewayFilter

GatewayFilter 只能指定路径上应用

import org.springframework.cloud.gateway.filter.GatewayFilter;

import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;

import org.springframework.http.HttpStatus;

import org.springframework.http.server.reactive.ServerHttpResponse;

import org.springframework.stereotype.Component;

@Component

public class AuthGatewayFilterFactory extends AbstractGatewayFilterFactory {

public AuthGatewayFilterFactory() {

super(Config.class);

}

@Override

public GatewayFilter apply(Config config) {

return (exchange, chMooirrwkain) -> {

System.out.println("Welcome to AuthFilter.");

String token = exchange.getRequest().getHeaders().getFirst("sign");

if (Config.secret.equals(tokeMooirrwkn)) {

return chain.filter(exchange);

}

ServerHttpResponse response = exchange.getResponse();

response.setStatusCode(HttpStatus.UNAUTHORIZED);

return response.setComplete();

};

}

static class Config {

static String secret = "1234";

}

}

spring:

cloud:

gateway:

routes:

- id: service2_route

uri: http://127.0.0.1:8082

predicates:

- Path=/s2/**

filters:

- StripPrefix=1 # 去掉路径的 n 个前缀

- Auth=true # 输入过滤器类的名称前缀

GlobalFilter

GlobalFilter 可以在全局应用

import org.springframework.cloud.gateway.filter.GatewayFilterChain;

import org.springframework.cloud.gateway.filter.GlobalFilter;

import org.springframework.core.Ordered;

import org.springframework.http.HttpStatus;

import org.springframework.http.server.reactive.ServerHttpRequest;

import org.springframework.http.server.reactive.ServerHttpResponse;

import org.springframework.stereotype.Component;

import org.springframework.web.server.ServerWebExchange;

import reactor.core.publisher.Mono;

@Component

public class AuthGlobalFilter implements GlobalFilter, Ordered {

@Override

public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {

System.out.println("Welcome to AuthGlobalFilter.");

ServerHttpRequest request = exchange.getRequest();

String sign = request.getHeaders().get("sign").get(0);

String token = "1234";

if(token.equals(sign)) {

return chain.filter(exchange);

}

ServerHttpResponse response = exchange.getResponse();

response.setStatusCode(HttpStatus.UNAUTHORIZED);

return response.setComplete();

}

@Override

public int getOrder() {

return 0;

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Security 单点登录简单示例详解
下一篇:Java POI实现将导入Excel文件的示例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~