spring boot三種方式設置跨域


1、如圖單個處理器添加:

 

 

        responses.setHeader("Access-Control-Allow-Origin", "*");
        responses.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        responses.setHeader("Access-Control-Allow-Credentials","true");

2、使用javax下servlet的過濾器filter

a、自定義Myfilter實現filter接口

b、全局設置如下:

/**
 * @program: te
 * @description: 配置跨域問題
 * @author: Mr.zhourui
 * @create: 2020-04-29 15:08
 **/

public class Myfilter extends HttpServlet implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    //todo
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        // 添加參數,允許任意domain訪問
        resp.setHeader("Access-Control-Allow-Origin", "*");
        // 這個allow-headers要配為*,這樣才能允許所有的請求頭 ---
        resp.setHeader("Access-Control-Allow-Headers", "*");
        resp.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
        resp.setHeader("Access-Control-Allow-Credentials","true");

    }
}

3、使用攔截器配置 注意:這里controller 需要加上 

@CrossOrigin  注解使用

a、自定義攔截器MyInterceptor 實現springboot 的HandlerInterceptor 接口

/**
 * @author xuxueli 2015-12-12 18:09:04
 */

@Component
public class MyInterceptor implements HandlerInterceptor {


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
        response.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
        //瀏覽器會先發送一個試探請求OPTIONS,然后才會發送真正的請求,為了避免攔截器攔截兩次請求,所以不能讓OPTIONS請求通過
        if ("OPTIONS".equals(request.getRequestURI())){
            return false;
        }
        return true;


    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }

}

b、加入webmvc 的配置中 在上下文使用

/**
 * @program: te
 * @description:
 * @author: Mr.zhourui
 * @create: 2020-04-29 14:48
 **/


@Configuration
@EnableWebMvc
public class MyWebMvcConfigurerConfig extends WebMvcConfigurerAdapter {
    @Resource
    private MyInterceptor myInterceptor;
//    @Override
//    public void addCorsMappings(CorsRegistry registry) {
//        super.addCorsMappings(registry);
//        registry.addMapping("/**")
//                .allowedOrigins("*")
//                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
//                .allowCredentials(true)
//                .allowedHeaders("*")
//                .maxAge(3600);
//
//    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //全部攔截
//        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
        registry.addInterceptor(myInterceptor).excludePathPatterns("/**");
        super.addInterceptors(registry);
    }
}

 4、最后一種針對springboot 可行

package com.fyun.tewebcore.filter;

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;

/**
 * @program: te
 * @description: 跨域配置
 * @author: Mr.zhourui
 * @create: 2020-05-13 14:30
 **/
@Configuration
public class CorsConfig {
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*"); //允許任何域名
        corsConfiguration.addAllowedHeader("*"); //允許任何頭
        corsConfiguration.addAllowedMethod("*"); //允許任何方法
        return corsConfiguration;
    }

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig()); //注冊
        return new CorsFilter(source);
    }


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM