spring mvc 不定路径 请求映射

公司项目整体结构迁移,从原有的spring + zk + thrift 转移到 spring-cloud, 搭建了spring-cloud 全家桶,新的微服务模块写的后台接口,接入到原有域名,遇到了手动转发的问题.

 

原有的管理后台, 称之为 admin-api, 是一个spring mvc工程, 向前端提供http接口,后端与原有的各个thrift项目链接, 起到转换http请求的作用. 新建立的spring-cloud项目, 通过zuul 提供统一的访问域名,但是和原有域名不同,存在权限控制及安全性问题.

 

最原始的方案, 在admin-api中提供controller, 对应相同的spring-cloud 工程接口,问题可以解决,但是重复的工作量很是乏味, 由于spring-cloud暴露的接口形式较为固定(get请求或者 post json请求), 故决定进行封装(重复的逻辑, 就是代码应该自动实现的地方).

方案一:

添加controller, 确定起始路径, 并设定路径变量, 然后按照路径变量中的serviceName及路径调用zuul进行转发. 但是不确定会有多少级的路径变量, 存在后续不断更新的工作, 放弃

 

方案二:

添加controller, 路径确定, 同时添加interceptor, 拦截指定规则的请求,获取路径变量并存储到attributes中, 代起转发到指定controller中, 则获取路径变量进行转发.

结果:  在 搭建的spring-boot中实验成功, 顺利进行转发, 但是在原有的项目中, 遇到了 DispatcherServlet 拦截的问题, 后查看spring mvc发现 , 所有请求会经过该servlet, 确认存在路径映射后, 才会下放到HandlerInterceptorAdapter 类中,所以在实际项目中, 我的拦截器在产生真正的效用前, 请求已经被返回, 其余改动耗费较多,暂时搁置.

 

方案三:

在即将重试方案一的时候,偶然发现了spring mvc 对不定路径的另外一种支持, 请求格式如下:

    @RequestMapping(value = "/myGateway/{serviceName}/**")
    public String moduleStrings(@PathVariable String serviceName, HttpServletRequest request) throws Exception {

在上述情形下, 该controller 会拦截以myGateway开头, 且至少含有serviceName的URI的请求, 然后我再request中获取到路径变量, 解析请求携带的parameters 以及body中的参数, 解析请求方式( GET POST), 即可完成一个轻量级的满足当前场景的微型网关服务,

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值