在Vertx Web的体系下,如何做一个Action级别的拦截器?
我希望能进行参数校验,权限校验,登录校验等校验检查和认证操作,但是我希望的是当一个请求成功匹配一个路由后(Route),在真正调用路由处理的方法前,也就是Handler<RoutingContext> 之前,在调用调用一个返回参数为Void方法,我想在这个方法内编写校验检查认证的代码,以此作为拦截器。,
我的最终目的是需要一个Action级别的拦截器,但是Vertx没有提供这个组件,那么我就得自定义拦截组件,还是在基于Vert.x Web路由配置基础上实现。那么我设想至少流程应该是这样的,
VertxHttp服务端收到了一个请求——>创建RoutingContext对象——>将RoutingContext对象与使用者配置的Route进行匹配——>请求匹配Route成功——>调用自定义拦截组件——>拦截校验全部通过——>调用最终的Action本身的Handler<RoutingContext>方法。
按照这个流程来提问,那么我要问的是,“调用自定义拦截组件“,这个步骤是怎么接上“匹配请求Route成功”的,既然请求匹配Route成功了,后面又调用了拦截器组件。那么至少肯定得有个匹配Route成功的调用个接口来对接吧。这样传递一个接口实现类,在接口的实现类上,就可以实现自定义拦截功能。
目前我知道的方法是,弄一个类实现Route的handler方法的handler<RoutingContext> 接口,将Handler接口的handler方法实现,作为拦截方法,用另一个Handler<RoutingContext>类型的函数字段代替Handler作为action处理,在handler方法内就可以实现拦截了,写一个if逻辑语句实现最简单的拦截效果。但这个实现的方式如果要实现全局拦截(拦截所有未匹配排除项的Route)太绕了。能不能直接在Router上扩展?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
@okou
Action拦截器的特点是,只要请求匹配到了Action,就拦截,没有匹配就不拦截请求。
以下我编写的Action级别的拦截器实现,基于Route的handler方法的形式参数类型接口的实现类来弄的,path和action处理方法配置也要经过该实现类来配置。
在实现类的内部实现统一拦截功能(例如静态属性),然后所有需要统一拦截的Route的handler都是使用该接口实现类作为参数
实现类源码:
构造一个ActionHandler对象,并将传给Route的handler方法
使用:设置两个Action,并配置统一的拦截功能
以上是测试使用,没有用反射。
除了基于Route的handler方法的参数实现类做拦截器,你还有什么其他的方法吗,来实现吗?