美文网首页
springboot项目跨域解决方案

springboot项目跨域解决方案

作者: 叫我胖虎大人 | 来源:发表于2019-08-17 16:29 被阅读0次

1.使用@CrossOrigin注解

在Controller上添加@CrossOrigin注解,这个注解也可以单独使用到接口上面.

2.通过配置类解决跨域

编写一个WebConfig类,在其中增加跨域配置

@Configuration
public class WebConfig implements WebMvcConfigurer {


    @Autowired
    private AuthorityInterceptor authorityInterceptor;

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "DELETE", "PUT")
                .maxAge(3600);
    }
}

需要注意一点response.setHeader("Access-Control-Allow-Credentials", "true")这个情况下,不能直接将Access-Control-Allow-Origin设置为*

3.配置Filter,主要解决浏览器的预请求

编写一个Filter类继承自OncePerRequestFilter
重写doFilterInternal()方法

@Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
        /*
         * 跨域问题的设置
         */
        String option = "OPTIONS";
        if (option.equals(request.getMethod())) {
            log.info("浏览器的预请求的处理..");
            response.setContentType("application/json; charset=utf-8");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Access-Control-Allow-Origin",request.getHeader("origin"));
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Methods", "POST, GET,PUT, OPTIONS, DELETE,HEAD");
            response.setHeader("Access-Control-Allow-Credentials", "true");
            response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Accept, token,Origin, No-Cache, X-Requested-With, If-Modified-Since,authorization,Pragma, Last-Modified, Cache-Control, Expires, Authorization,Token");
            return;
        } else {
            String requestURI = request.getRequestURI();
            log.info("requestURI:{}", requestURI);
        }
}

Github源码https://github.com/Panghu98/crossorigin/blob/master/README.md

相关文章

网友评论

      本文标题:springboot项目跨域解决方案

      本文链接:https://www.haomeiwen.com/subject/fpkksctx.html