配置静态资源地址映射

  1. package top.xinzhang0618.demo.config;
  2. import org.springframework.context.annotation.Configuration;
  3. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  4. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  5. /**
  6. * 静态资源地址映射
  7. *
  8. * @author gavin
  9. * @version 2020/6/10 0010
  10. */
  11. @Configuration
  12. public class StaticResourceConfig implements WebMvcConfigurer {
  13. /**
  14. * 访问 http://localhost:8080/images/11.png ==> D:/images/11.png
  15. * @param registry
  16. */
  17. @Override
  18. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  19. registry.addResourceHandler("/images/**").addResourceLocations("file:D://images/");
  20. }
  21. }

参考:

  1. /**
  2. * FileName: StaticResourceConfig
  3. * Description: 静态文件转换
  4. * Author: snow
  5. * Date: 2019/1/23 20:32
  6. */
  7. @Configuration
  8. public class StaticResourceConfig implements WebMvcConfigurer {
  9. @Override
  10. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  11. registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
  12. }
  13. @Override
  14. public void addCorsMappings(CorsRegistry registry) {
  15. registry.addMapping("/api/**")
  16. .allowedOrigins("*")
  17. .allowedMethods("PUT", "GET", "POST", "DELETE", "PATCH")
  18. .allowCredentials(false).maxAge(3600);
  19. }
  20. }

全局跨域配置

参考: https://www.cnblogs.com/yuansc/p/9076604.html

跨域知识点补充:
1.同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。 同源策略是浏览器安全的基石。
源[origin]就是协议、域名和端口号。例如:http://www.baidu.com:80这个URL。若地址里面的协议、域名和端口号均相同则属于同源。

2.跨域,非同源的网站之前的请求是跨域请求

3.如何跨域,降域,JSONP跨域,CORS跨域

4.CORS跨域
为了解决浏览器同源问题,W3C 提出了跨源资源共享,即 CORS(Cross-Origin Resource Sharing)。
CORS 做到了如下两点:

  • 不破坏即有规则
  • 服务器实现了 CORS 接口,就可以跨源通信

CORS分为简单请求和非简单请求
4.1 对于简单请求,CORS的策略是请求时在请求头中增加一个Origin字段,服务器收到请求后,根据该字段判断是否允许该请求访问。

  1. 如果允许,则在 HTTP 头信息中添加 Access-Control-Allow-Origin 字段,并返回正确的结果 ;
  2. 如果不 允许,则不在 HTTP 头信息中添加 Access-Control-Allow-Origin 字段 。

4.2 对于非简单请求的跨源请求,浏览器会在真实请求发出前,增加一次OPTION请求,称为预检请求(preflight request)。预检请求将真实请求的信息,包括请求方法、自定义头字段、源信息添加到 HTTP 头信息字段中,询问服务器是否允许这样的操作。

5.SpringBoot配置CORS
5.1 使用@CrossOrigin注解(可用于类和接口上)
5.2 WebMvcConfigurer配置addCorsMappings

  1. /**
  2. * @author gavin
  3. * @version 2020/6/10 0010
  4. */
  5. @Configuration
  6. public class MvcConfig implements WebMvcConfigurer {
  7. /**
  8. * 设置全局跨域
  9. */
  10. @Override
  11. public void addCorsMappings(CorsRegistry registry) {
  12. registry.addMapping("/**")
  13. .allowedOrigins("*")
  14. .allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH")
  15. // 预检请求的有效期,单位为秒。有效期内,不会重复发送预检请求
  16. .maxAge(3600)
  17. // 是否允许用户发送、处理 cooki
  18. .allowCredentials(true);
  19. }
  20. }

5.3 添加Filter

  1. /**
  2. * CorsConfig
  3. *
  4. * @author gavin
  5. * @version 2020/6/10 0010
  6. */
  7. @Configuration
  8. public class CorsConfig {
  9. @Bean
  10. public FilterRegistrationBean corsFilter() {
  11. UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
  12. CorsConfiguration config = new CorsConfiguration();
  13. config.setAllowCredentials(true);
  14. config.addAllowedOrigin("*");
  15. config.addAllowedHeader("*");
  16. config.addAllowedMethod("*");
  17. // CORS 配置对所有接口都有效
  18. source.registerCorsConfiguration("/**", config);
  19. FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
  20. bean.setOrder(0);
  21. return bean;
  22. }
  23. }

配置拦截器

HandlerInterceptor拦截器的使用
参考: https://blog.csdn.net/zhibo_lv/article/details/81699360

配置转化器

字符串转LocalDate

  1. /**
  2. * 字符串转LocalDate
  3. *
  4. * @author gavin
  5. * @date 2020-06-12
  6. */
  7. public class String2LocalDateConverter implements Converter<String, LocalDate> {
  8. @Override
  9. public LocalDate convert(String source) {
  10. if (StringUtils.isBlank(source)) {
  11. return null;
  12. }
  13. return DateUtils.parserLocalDate(source);
  14. }
  15. }

字符串装LocalDateTime

  1. public class String2LocalDateTimeConverter implements Converter<String, LocalDateTime> {
  2. @Override
  3. public LocalDateTime convert(String source) {
  4. if (StringUtils.isBlank(source)) {
  5. return null;
  6. }
  7. return DateUtils.parserLocalDateTime(source);
  8. }
  9. }

配置

  1. /**
  2. * @author gavin
  3. * @date 2020-06-12
  4. */
  5. @Configuration
  6. public class WebConfiguration implements WebMvcConfigurer {
  7. @Override
  8. public void addFormatters(FormatterRegistry registry) {
  9. registry.addConverter(String.class, LocalDateTime.class, new String2LocalDateTimeConverter());
  10. registry.addConverter(String.class, LocalDate.class, new String2LocalDateConverter());
  11. }
  12. }