Spring cloud-gateway整合satoken完成鉴权
在Spring Cloud Gateway中整合Satoken进行鉴权,你需要做以下几个步骤:
- 引入Satoken和Spring Cloud Gateway的依赖。
- 配置Satoken的密钥和其他必要配置。
- 创建一个Satoken的鉴权过滤器。
- 将过滤器注册到Gateway中。
以下是一个简单的示例:
Step 1: 添加依赖到你的pom.xml
或build.gradle
文件中。
<!-- 引入Satoken依赖 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>satoken</artifactId>
<version>版本号</version>
</dependency>
<!-- Spring Cloud Gateway -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
Step 2: 配置Satoken。
# application.yml 或 application.properties
satoken:
config:
token-name: token
logout-key: /logout # 注销接口
ignore:
urls: # 不进行鉴权的URL
- /login
Step 3: 创建鉴权过滤器。
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.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import cn.dev33.satoken.stp;
@Component
public class AuthFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 检查请求是否需要鉴权
if (需要鉴权(exchange.getRequest().getURI().getPath())) {
// 验证token
if (stp.checkToken(getToken(exchange.getRequest().getHeaders()))) {
return chain.filter(exchange);
}
// 返回未授权响应
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
// 不需要鉴权,继续执行
return chain.filter(exchange);
}
private String getToken(HttpHeaders headers) {
// 从请求头中获取token
return headers.getFirst("token");
}
private boolean 需要鉴权(String path) {
// 判断是否为不需要鉴权的URL
// ...
}
@Override
public int getOrder() {
// 定义过滤器顺序
return 0;
}
}
Step 4: 注册鉴权过滤器。
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframe
评论已关闭