Springboot中的context-path
1.定义
Context path of the application. 应⽤的上下⽂路径,也可以称为项⽬路径,是构成url地址的⼀部分。
2.如何配置
SpringBoot 2.0.0.RELEASE版本以及之后
server: servlet: context-path: /myapp1
SpringBoot 2.0.0.RELEASE版本以及之前
server: context-path: /myapp1
作⽤
假设我的应⽤有个接⼝/api/test,我在本地的8080端⼝启动我的应⽤。访问这个接⼝的url为localhost:8080/api/test.
加上了context-path为myapp1之后,我去访问这个接⼝的url就要变成localhost:8080/myapp1/api/test
注意项以及采坑
注意项
springboot项⽬设置了context-path之后,假如设置为myapp1,那么项⽬启动之后,访问项⽬的所有请求的URI必须/myapp1开头,才
能访问进项⽬。
踩坑
我的项⽬设置了context-path为myapp1,然后我想搞个过滤器MyFilter来处理以"/api"开头的请求,配置filter的过滤规则的时候,我将其
设置成了"/myapp1/api/*",结果向应⽤发送localhost:8080/myapp1/api/test的时候死活也进⼊不到我的MyFilter过滤器中。
@Bean FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter()); //错误的写法 filterRegistrationBean.addUrlPatterns("/myapp1/api/*"); return filterRegistrationBean; }
最后查看源码发现,如果项⽬设置了context-path,tomcat,spring在将请求的URI和我们设置的过滤器匹配规则进⾏⽐较的时候,⽤来⽐
较的requestURI已经是去掉context-path的了,所以设置filter的匹配规则的时候不要管context-path是多少。
@Bean FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter()); //正确的写法 filterRegistrationBean.addUrlPatterns("/api/*"); return filterRegistrationBean; }