学习springboot的旅程,就像蜗牛爬山,一点点的往上爬,一点点的欣赏旅途的风景
上一章 搭锅起火,准备好环境了。现在,我们该开始煮美食了。
开始前,请思考一下
- 请求是不是可以归类?(以下请求分类纯属个人见解!)
- 请求静态资源:例如 图片,脚本文件,样式文件等
- 请求数据:请求执行业务逻辑后返回的状态或结果数据,请求页面展示数据等
- 请求视图:请求页面 现在都很流行前后分离了,这样的背景下跨域是很常见的。
- 问题一:怎么解决跨域请求?
- 问题二:假设你有静态资源情况下,怎么配置?
跨域请求设置
- 思路:写个Filter拦截器,拦截所有请求,并设置跨域请求的范围等
- 但是springboot怎么搞?这里就需要引入一个好玩的东西:CORS过滤器
CORS过滤器:实现了标准 javax.servlet.Filter 接口。它拦截传入的HTTP请求,如果将它们标识为跨域,则在将HTTP请求传递到实际目标(Servlet,JSP,静态XML / HTML文档)之前,将应用适当的CORS策略和标头。
- 那怎么用:
- 第一步实现跨域逻辑
- 第二步加入springboot拦截链(springmvc 支持 cors ,具体原理看这)
- 代码实现:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* Created by hxz+lh+chen 基础配置
*/
@Configuration
public class WebMvcConfiguration{
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
final CorsConfiguration corsConfiguration = new CorsConfiguration();
/* 是否允许请求带有验证信息 */
corsConfiguration.setAllowCredentials(true);
/* 允许访问的客户端域名 */
corsConfiguration.addAllowedOrigin("*");
/* 允许服务端访问的客户端请求头 */
corsConfiguration.addAllowedHeader("*");
/* 允许访问的方法名,GET POST等 */
corsConfiguration.addAllowedMethod("*");
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
这样就实现了跨域请求设置了!
静态资源配置
- 首先要知道,springboot的项目结构( springboot在resources 下提供了 存储放静态资源的static 文件目录)
- 问题来了,你怎么设置静态资源被加载的映射路径?
- 代码实现:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* Created by hxz+lh+chen 基础配置
*/
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
//配置spring-boot静态资源映射路径
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
//.setCachePeriod(31556926);//表示缓存的时间(秒)
}
}
//-----------------------以下是页面引用
<script src="/static/com/hxz/js/jquery-3.2.1.slim.min.js" ></script>
<link rel="stylesheet" href="/static/com/hxz/css/style.css">
到这里就ok了!!!
那么,接下来是思考一下,如果是前后不分离的情况,你要怎么支持页面开发?