浅谈spring-boot 允许接口跨域并实现拦截(CORS)

 更新时间:2017年08月18日 14:07:35   作者:bluecrop  
本篇文章主要介绍了浅谈spring-boot 允许接口跨域并实现拦截(CORS),具有一定的参考价值,有兴趣的可以了解一下

本文介绍了spring-boot 允许接口跨域并实现拦截(CORS),分享给大家,也给自己留个笔记

pom.xml(依赖的jar)

// 在spring-boot-starter-web的启动器中,已经依赖好了
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
</dependency>

CORS跨域的配置(主要配置允许什么样的方法跨域)

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.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by Msater Zg on 2017/4/3.
 */
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
  @Override
  public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
        .allowedOrigins("*")
        .allowCredentials(true)
        .allowedMethods("GET", "POST", "DELETE", "PUT")
        .maxAge(3600);
  }
  private CorsConfiguration buildConfig() {
    CorsConfiguration corsConfiguration = new CorsConfiguration();
    List<String> list = new ArrayList<>();
    list.add("*");
    corsConfiguration.setAllowedOrigins(list);
    /*
    // 请求常用的三种配置,*代表允许所有,当时你也可以自定义属性(比如header只能带什么,只能是post方式等等)
    */
    corsConfiguration.addAllowedOrigin("*"); 
    corsConfiguration.addAllowedHeader("*"); 
    corsConfiguration.addAllowedMethod("*"); 
    return corsConfiguration;
  }
  @Bean
  public CorsFilter corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", buildConfig());
    return new CorsFilter(source);
  }
}

拦截器配置(可以根据不同路径,配置不同的拦截器)

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Created by Msater Zg on 2017/4/5.
 * 拦截器
 */
public class ApiInterceptor implements HandlerInterceptor {
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    // 请求前调用
    System.out.println("拦截了");
    return true;
  }
  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    // 请求过程中调用
    System.out.println("拦截了");
  }
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    // 请求完成时调用
    System.out.println("拦截了");
  }
}

拦截器管理类,用于生成项目的拦截器链

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
 * Created by Msater Zg on 2017/4/5.
 * 拦截器管理工具
 */
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // 多个拦截器组成一个拦截器链
    // addPathPatterns 用于添加拦截规则
    // excludePathPatterns 用户排除拦截
    registry.addInterceptor(new ApiInterceptor()).addPathPatterns("/user/**"); //对来自/user/** 这个链接来的请求进行拦截
    super.addInterceptors(registry);
  }
}

结语

实现跨域的方式有很多,这只是其中一种。有什么不对的地方希望能及时指出。谢谢!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 在SpringBoot框架中实现打印响应的日志

    在SpringBoot框架中实现打印响应的日志

    这篇文章主要介绍了在SpringBoot框架中实现打印响应的日志,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Spring实现文件上传(示例代码)

    Spring实现文件上传(示例代码)

    Spring可以继承commons-fileupload插件来实现文件上传的功能。分为前端JSP编写和后台Controller的编写
    2013-10-10
  • Spring Boot整合mybatis使用注解实现动态Sql、参数传递等常用操作(实现方法)

    Spring Boot整合mybatis使用注解实现动态Sql、参数传递等常用操作(实现方法)

    这篇文章主要介绍了Spring Boot整合mybatis使用注解实现动态Sql、参数传递等常用操作(实现方法),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 使用webservice自定义注解处理参数加解密问题

    使用webservice自定义注解处理参数加解密问题

    这篇文章主要介绍了使用webservice自定义注解处理参数加解密问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • @Transactional和@DS怎样在事务中切换数据源

    @Transactional和@DS怎样在事务中切换数据源

    这篇文章主要介绍了@Transactional和@DS怎样在事务中切换数据源问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • springboot动态调用实现类方式

    springboot动态调用实现类方式

    这篇文章主要介绍了springboot动态调用实现类方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringCloud OpenFeign自定义结果解码器方式

    SpringCloud OpenFeign自定义结果解码器方式

    这篇文章主要介绍了SpringCloud OpenFeign自定义结果解码器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java Agent探针技术详解示例

    Java Agent探针技术详解示例

    这篇文章主要介绍了Java Agent 探针技术详情,Java 中的 Agent 技术可以让我们无侵入性的去进行代理,最常用于程序调试、热部署、性能诊断分析等场景,下文更多相关资料,感兴趣的小伙伴可以参考一下
    2022-06-06
  • springboot+websocket实现并发抢红包功能

    springboot+websocket实现并发抢红包功能

    本文主要介绍了springboot+websocket实现并发抢红包功能,主要包含了4种步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • java设计模式系列之装饰者模式

    java设计模式系列之装饰者模式

    这篇文章主要为大家详细介绍了java设计模式之装饰者模式,装饰者模式是一种结构式模式,感兴趣的朋友可以参考一下
    2016-02-02

最新评论