spring - 在 Spring Cloud Gateway 中禁止未经身份验证的请求
问题描述
我已经在 Spring Cloud Gateway 中实现了自定义预过滤器,它允许经过身份验证的请求通过下游流程。我想要的是,如果请求未经身份验证,则返回 401 UNAUTHORIZE 状态响应并停止下游处理。能不能实现这个spring cloud gateway。
请帮忙。
我的过滤器代码如下
public class ValidUserFilter implements GatewayFilterFactory {
@Override
public GatewayFilter apply(Object config) {
return (exchange, chain) -> {
ServerHttpRequest request = exchange.getRequest();
if (isValidRequest(request)) {
// Allow processing
} else {
// set UNAUTHORIZED 401 response and stop the processing
}
return chain.filter(exchange);
};
}
}
和配置如下:
- id: myroute
uri: http://localhost:8080/bar
predicates:
- Path=/foo/**
filters:
- ValidUserFilter
解决方案
见代码SetStatusGatewayFilterFactory
// set UNAUTHORIZED 401 response and stop the processing
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
推荐阅读
- c++ - 动态二维数组 - 缺少分段错误?
- keyboard-shortcuts - 如何使用快捷方式减少 Python 新行?
- vba - 在MS Access中使用VBA做REPLACE的多项功能?
- php - 在 PHP 中使用 XPath 从元素中获取类
- python - IotHub 设备端点不显示消息
- python - Windows 计划任务每天都在运行 Python 脚本。运行时如何查看 Python shell?
- azure-devops - 将 azure-pipeline.yml 转换为模板
- javascript - Rails PayPal Checkout SDK 在视图而不是控制器中存储请求正文
- javascript - 为什么 Chrome Devtools 将当前范围内定义的变量显示为未定义?
- c# - 如何使用 Microsoft 登录应用程序?