springboot 怎么根据条件丢弃客户端发送过来的请求

24 天前
 NxxRngjnbgj

怎么根据条件,将客户端的请求直接丢弃,不做任何回应,只在代码层实现,是用拦截器的 postHandle 么,但是感觉不太对

955 次点击
所在节点    问与答
11 条回复
sagaxu
24 天前
你丢弃不做任何回应,网关就当作超时返回 504 了,甚至可能会把你这个服务从集群中移除。如果是 nginx ,可以返回特殊的状态码 444 ,关闭客户端连接。
vivisidea
24 天前
返回一个 httpstatus 200 (或其它 status ) 内容为空不行吗?

状态码也不能返回?那 client 会认为超时了。。
NxxRngjnbgj
24 天前
@vivisidea 对,就是让客户端感觉到超时了
cookii
24 天前
controller 返回一个 mono.never()即可
Jinnrry
24 天前
你还是说下原始需求吧

什么叫不做任何回应?返回一个状态码也是回应呀。你是想把 tcp 连接一直保持着,但是不回应数据?还是直接关掉 tcp 连接?

这两种操作都得看你上层网关是怎么配置的,就像 1 楼说的很容易让网关觉得你服务挂了,直接给你服务器踢出列表了。
yty2012g
24 天前
使用了 Servlet 容器比较难直接操作关闭底层的连接。个人认为最简单的方法是写个 filter ,符合条件的直接 return 或者是 respose.getOutputStream().close(),但是这种依然会返回一个 200 ,只不过 content-length=0 。如果要是基于 Netty 的 WebServer ,到是可以直接 close connection ,那就彻底没有其他额外的返回了
wshcdr
24 天前
BS 天生就是 Request 和 Response ,你不 Response ? 除非你造 HTTP 的反
vivisidea
23 天前
@NxxRngjnbgj 那不行的,你啥都不响应,自己的线程也得搭进去陪着 sleep 在那,多来几个这样的请求 server 端线程池就满了,需求不合理,哪有这样实现丢弃的

一般都是收到请求,不对请求做任何处理,直接返回个 200 完事,这叫丢弃
NxxRngjnbgj
23 天前
@Jinnrry 就是很多非合规的请求,需要根据规则进行阻拦,目前领导的意思就是不要让客户端看出来是主动拦截的,所以我的第一想法是能不能丢掉
NxxRngjnbgj
23 天前
@yty2012g 那看来没什么好办法,要实现估计难度也很高
Jinnrry
23 天前
@NxxRngjnbgj 不能让客户端看出来?你的客户端是 h5 还是 app ?还是第三方 api ?

不被看出来是不被普通用户看出来还是不被黑产看出来还是不被第三方研发看出来?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1075136

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX