天天看点

爬山的蜗牛旅程:二、springboot配置静态资源和跨域请求开始前,请思考一下跨域请求设置静态资源配置

学习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 文件目录)
    爬山的蜗牛旅程:二、springboot配置静态资源和跨域请求开始前,请思考一下跨域请求设置静态资源配置
  • 问题来了,你怎么设置静态资源被加载的映射路径?
  • 代码实现:
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了!!!

那么,接下来是思考一下,如果是前后不分离的情况,你要怎么支持页面开发?

继续阅读