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
作者:botbot_1d2e
链接:https://www.jianshu.com/p/4b38c6729d20
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
注意项以及采坑
注意项
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;
}