拦截并修改webmvc中的URL

270 阅读2分钟

在实际项目中我们可能会遇到这样一种场景,后台服务端接受前台发送来一个请求,然后需要对请求路径进行处理,达到重定向的目的,这里面会包含两种情况 ,第一种是直接在当前服务端就可以进行处理掉。也是我们常见的使用场景,另一种是需要重新定向到新的服务器进行处理。 这里只提供针对第一种情况的处理,第二种情况的话后续文章会提供处理办法。首先我们面对的是一款很成熟的软件 ,会遵循基本的设计原则,开闭原则,对修改关闭,对扩展放开,我们要做的是扩展它的功能而不是,在原来的功能的基础上 进行修改,对于 webmvc来说 对外提供的扩展功中符合我们要求的有 Filter功能 ,我没说你可以在 扩展一个 Filter功能 ,将所有和请求url 有关的处理者这里进行一个扩展 。比如 用一个服务端同时处理 来自于 安卓 和ios 的移动端 的请求 ,这些请求有个特点是 来自于 ios 的请求 会以 /ios 开始 ,来自于安卓的请求会以/android 开头,由于后台是一个服务处理 需要统一映射到 Controller 来处理 来自 ios 和安卓端的请求。 这个时候可以添加 一个 拦截器达到两方面的目的 ,第一方面是 可以对来自不同移动端 进行统一处理统一映射成 同一个请求 URL ,达到对下层请求 透明处理。

可以用系统统一扩展接口来处理对URL 的改写。设置 拦截器执行优先级 和注册,实例中扩展的是 OncePerRequestFilter 接口 。
第二个目的 拦截处理请求的统计数据。起到拦截过滤的作用。这样做的一个坏处是 由于用的是框架提供的扩展功能 ,会和框架绑定 ,不方便扩展 同时由于是拦截器来处理的 ,是按照优先级来出来的 对于优先级低于 房钱扩展接口的拦截器,会保持一定的透明性。