目录
简介
实现步骤
1. 修改项目配置类中关于 cors 的配置;关键在于下面 setAllowCredentials(true) 个配置
2. 前端的 ajax 请求中需要添加如下参数
扩展:使用 spring-session + redis 可以轻松实现 Session 共享的问题
1. 在项目的 pom.xml 配置文件中,添加 spring-session 依赖
2. 在 application.properties 配置文件中添加如下配置
使用 @CrossOrigin 注解即可实现跨域请求,不过由此带来的问题是 HttpSession 不一致的问题;真实情景:用户请求后台验证码,后台 session 保存验证码 5 分钟,当用户在前端输入验证码后,点击确认再次发送请求到后台验证是否和上一次请求中 session 保存的验证码一致;如果前端和后台是分离开发的,请求都是跨域请求的话,就会导致两次请求方法中的 session 不一致,从而导致验证失败
@Configuration
public class AppConfig {@Beanpublic CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.setAllowedOrigins(Arrays.asList("*"));corsConfiguration.addAllowedHeader("*");corsConfiguration.addAllowedMethod("*");corsConfiguration.setAllowCredentials(true);source.registerCorsConfiguration("/**", corsConfiguration);return new CorsFilter(source);}
}
$.ajax({xhrFields: {withCredentials: true},crossDomain: true,// 非必须url: "http://localhost:8080/customer/register",type: "POST",dataType: "json",contentType: "application/json;charset=utf-8",data: JSON.stringify(param),success: function(data) {console.log(data);},error: function(err) {console.log(err);}
});
在浏览器的控制台可发现,实际上前台请求后台的时候传递了 sessionId 作为 "token";如果是自定义 XMLHttpRequest 对象,属性调整为:xhr.withCredentials = true
org.springframework.boot spring-boot-starter-data-redis
org.springframework.session spring-session-data-redis
############################## Redis 设置 ##########################################
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456
spring.redis.timeout=60
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=-1
spring.redis.jedis.pool.max-idle=5
spring.redis.jedis.pool.min-idle=1############################## spring session 配置 ##################################
spring.session.store-type=redis
# 非必需配置
#spring.session.redis.flush-mode=on_save
# 非必需配置,添加后会在 redis 中生成 spring:session:aa ... 这种格式
#spring.session.redis.namespace=aaa