通过过滤器实现前后端分离的跨域问题

本文介绍了如何在SpringBoot中通过全局和局部配置解决跨域问题。全局配置是在SecurityConfig中添加CorsFilter,允许所有来源、头部和方法,并开启携带Cookie。局部配置则使用@CrossOrigin注解于Controller上。同时,前端需设置请求携带Cookie。
摘要由CSDN通过智能技术生成

创建过滤器解决跨域问题

(就是前后端在不同服务器上运行)注意:局部和全局只能选择一种!!!
本文只讲述了解决跨域问题的方法,不提供源码讲解。

开启跨域配置

如果使用了springsecurity则需要在securityconfig中添加 .cors()

全局开启:

SecurityConfig:(随便一个config都行,这里就先放在securityconfig里)

@Bean
public CorsFilter corsFilter() {
    //创建CorsConfiguration对象后添加配置
    CorsConfiguration config = new CorsConfiguration();
    //设置放行哪些原始域,这里直接设置为所有
    config.addAllowedOriginPattern("*");
  	//你可以单独设置放行哪些原始域 config.addAllowedOrigin("http://localhost:2222");
    //放行哪些原始请求头部信息
    config.addAllowedHeader("*");
    //放行哪些请求方式,*代表所有
    config.addAllowedMethod("*");
    //是否允许发送Cookie,必须要开启,因为我们的JSESSIONID需要在Cookie中携带
    config.setAllowCredentials(true);
    //映射路径
    UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
    corsConfigurationSource.registerCorsConfiguration("/**", config);
    //返回CorsFilter
    return new CorsFilter(corsConfigurationSource);
}

局部开启:在controller类上加注解@CrossOrigin( 可以详细看注解里面的设置

@CrossOrigin
@RestController
@RequestMapping("/api/user")
public class AccountApiController {


}

设置前端发送的请求携带cookie

如果是自己写的前端需要在发送每个请求的时候带cookie信息(自定义请求,开启get、post请求时带cookie)

function get(url,data, success){
    $.ajax({
        type: "get",
        url: url,
        data:data,
        async: true,
        dataType: 'json',
        xhrFields: {
            withCredentials: true	//开启携带cookie信息,用于security识别用户是否登录
        },
        success: success
    });
}


function post(url, data, success){
    $.ajax({
        type: "post",
        url: url,
        async: true,
        data: data,
        dataType: 'json',
        xhrFields: {
            withCredentials: true 
        },
        success: success
    });
}

//举例:
function initUserInfo() {
    get('http://localhost:8080/api/user/info', {},function (data) {     //这里要加{},告诉data是空,否则会吧后面的当作data
        if (data.code === 200) {
            alert("登录成功,欢迎" + data.data.username + "进入图书管理系统!")

        } else {
            alert(data.reason)
            window.location = "http://localhost:8080/login.html"
        }
    })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值