您现在的位置是:亿华云 > 应用开发
SpringCloud Alibaba微服务实战之 禁止直接访问后端服务
亿华云2025-10-09 03:38:36【应用开发】4人已围观
简介本文转载自微信公众号「JAVA日知录」,作者单一色调 。转载本文请联系JAVA日知录公众号。前言使用SpringCloud架构后我们希望所有的请求都需要经过网关才能访问,在不作任何处理的情况下我们是可
本文转载自微信公众号「JAVA日知录」,微服务实作者单一色调 。战之直接转载本文请联系JAVA日知录公众号。禁止
前言
使用SpringCloud架构后我们希望所有的访问服务请求都需要经过网关才能访问,在不作任何处理的后端情况下我们是可以绕过网关直接访问后端服务的。如下,微服务实我们绕过网关直接访问后端服务也是战之直接可以获取到数据的。
那我们今天的禁止议题就是 如何防止请求绕过网关直接访问后端服务?
解决方案
我觉得防止绕过网关直接请求后端服务的解决方案主要有三种:
使用Kubernetes部署在使用Kubernetes部署SpringCloud架构时我们给网关的Service配置NodePort,其他后端服务的访问服务Service使用ClusterIp,这样在集群外就只能访问到网关了。后端
网络隔离后端普通服务都部署在内网,微服务实通过防火墙策略限制只允许网关应用访问后端服务。b2b供应网战之直接
应用层拦截请求后端服务时通过拦截器校验请求是禁止否来自网关,如果不来自网关则提示不允许访问。访问服务
这里我们着重关注在应用层拦截这种解决方案。后端
实现思路
实现思路其实也很简单,在请求经过网关的时候给请求头中增加一个额外的Header,在后端服务中写一个拦截器,判断请求头是否与在网关设置的请求Header一致,如果不一致则不允许访问并给出提示。
当然为了防止在每个后端服务都需要编写这个拦截器,我们可以将其写在一个公共的starter中,让后端服务引用即可。而且为了灵活,可以通过配置决定是否只允许后端服务访问。
接下来我们看看核心代码。(代码中涉及 SpringBoot 编写公共Starter的亿华云套路,相信看过我博客的同学肯定是会的,因为之前文章有详细说过。)
实现过程
在网关cloud-gateway模块编写网关过滤器
@Component @Order(0) public class GatewayRequestFilter implements GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { byte[] token = Base64Utils.encode((CloudConstant.GATEWAY_TOKEN_VALUE).getBytes()); String[] headerValues = { new String(token)}; ServerHttpRequest build = exchange.getRequest() .mutate() .header(CloudConstant.GATEWAY_TOKEN_HEADER, headerValues) .build(); ServerWebExchange newExchange = exchange.mutate().request(build).build(); return chain.filter(newExchange); } }在请求经过网关时添加额外的Header,为了方便这里直接设置成固定值。
建立公共Starter模块cloud-component-security-starter
在后端服务配置文件中添加属性配置,默认只能通过网关访问
javadaily: cloud: onlyFetchByGateway: true经过以上几步,一个公共的Starter模块就构建完成了。
后端服务引用此公共Starter模块即可,以account-service为例
<dependency> <groupId>com.jianzh5.cloud</groupId> <artifactId>cloud-component-security-starter</artifactId> </dependency>实现效果
直接访问后端服务接口
http://localhost:8010/account/getByCode/jianzh5
返回结果:
"message": "请通过网关访问资源", "status": 403, "success": false, "timestamp": 1611660015830 } 源码库很赞哦!(33)
相关文章
- a、变更前的公司证件扫描件(代码证或者营业执照)及联系人身份证复印件、变更后的公司证件扫描件(代码证或者营业执照)及新的联系人身份证复印件;身份证复印件需本人签名,公司证件复印件需加盖公章。
- 夯实数字化转型底座,戴尔PowerEdge服务器助推数字经济迈入快车道
- 聊一下Castle DynamicProxy基本用法(AOP)
- 数据中心制冷的再思考
- 比较短的域名方便用户记忆和传播,它带来的好处往往会超过其他类型的域名,如果你非要域名短而且还要包含关键词,那么往往会事与愿违,现在这种域名基本上是可遇而不可求的。
- 聊一聊如何SpringBoot外置Tomcat
- Nginx服务器的六种负载均衡策略详解
- Nginx常用功能全揭秘
- 3.dns修改成功后,点击“域名解析”,按提示进行操作。解析格式一般如下:
- Nginx“线程池模式”探讨;据说性能提高了9倍
站长推荐
比较短的域名方便用户记忆和传播,它带来的好处往往会超过其他类型的域名,如果你非要域名短而且还要包含关键词,那么往往会事与愿违,现在这种域名基本上是可遇而不可求的。
AMD EPYC服务器芯片将涨价10%~30%
戴尔科技PowerEdge服务器 节能环保守护绿色的土地
Nginx,永远滴神!
用户邮箱的静态密码可能已被钓鱼和同一密码泄露。在没有收到安全警报的情况下,用户在适当的时间内不能更改密码。在此期间,攻击者可以随意输入帐户。启用辅助身份验证后,如果攻击者无法获取移动电话动态密码,他将无法进行身份验证。这样,除非用户的电子邮件密码和手机同时被盗,否则攻击者很难破解用户的邮箱。
3步完成Nginx+tomcat负载均衡的会话保持
华为面向企业发布全栈数据中心解决方案,重构数字化基础设施
戴尔科技x86服务器的稳定性是生态的久经验证