Basic Knowledge
Http请求的总入口
org.springframework.web.reactive.DispatcherHandler.handle
HandlerFunction vs RouterFunction
参考自:https://www.baeldung.com/spring-5-functional-web
HandlerFunction
1 | @FunctionalInterface |
这个接口的实现其实类似servlet,如果和标准的Servlet.service(ServletRequest req, ServletResponse res)比对的话,HandlerFunction返回的是一个响应,而不是将和Servlet一样,将ServerResponse作为参数,这样子几乎没有副作用,而且更方便测试和重用。
RouterFunction
1 | @FunctionalInterface |
通常使用RouterFunctions.route()来绑定路由和HandlerFunction的实现,可以结合WebTestClient来做测试。
Problem Solution
CSRF Token has been associated to this client
今天出现了个奇葩的前端调用SpringGateway网关的错误,网上搜寻了片刻发现没有别人有过和我类似的案例。
于是我打算从HttpServlet总入口跟进问题,但是我忘了SpringGateway默认是使用SpringWebFlux的,和SpringMVC没有什么关系了。。。
然后全局搜索一下Spring的源码”CSRF Token has been associated to this client”,才意识到要换个入口来跟踪问题。
然而当我把入口换成org.springframework.web.reactive.DispatcherHandler去跟踪发现也不能进入断点,经常一番搜索和研究(因为我对WebFlux基本没用过)
发现是WebFlux的安全校验配置没有放开,为了测试我方面,我暂时先这样:
1 | @EnableWebFluxSecurity |
总结得出:当挖掘源码还不能解决的问题,只能硬着头皮翻遍网上的解决方案,如若还不行就只能去通读官方的文档了,当然,有时间和条件还是要先通读官方文档再来上手。