SpringBoot 前后端动静分离+集群 遇到的第一个问题:跨域session共享

原创 2018年04月16日 01:50:54

关于跨域的文章  https://blog.csdn.net/freshlover/article/details/44223467

关于跨域cookie携带  https://blog.csdn.net/a317560315/article/details/78397369

CORS Filter文档  http://software.dzhuvinov.com/cors-filter-configuration.html

后台服务要实现高可用,需要做相关的配置改变,其中比较重要的问题是session共享

原项目中,使用了自定义token放在Request Header中来鉴定用户的身份

但前后端分离毕竟是使用了验证码,有跨域问题,还是需要cookie携带才能解决

但是要实现集群,就必须实现session共享

因为项目中正好在用了Redis,所以选择了Rdis缓存 + Spring Session来实现

maven依赖

<!--redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- spring session的依赖 --> 
<dependency> <groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId> 
</dependency>

redis连接参数

#redis

spring.redis.host=xx.xx.xx.xx

spring.redis.port=6379

spring.redis.password=xxxx

前端ajax全局设置

  xhrFields: {      

    withCredentials: true 

  }

后端SpringBoot
public class AuthApplication {
    public static void main(String[] args) {
        SpringApplication.run(AuthApplication.class, args);
    }
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                //全局支持CORS(跨源请求)
                registry.addMapping("/**")
                        //允许任意来源    
                        .allowedOrigins("*")
                        .allowedMethods("PUT", "DELETE","OPTIONS", "GET", "POST")
                        .allowedHeaders("*")
                        .exposedHeaders("access-control-allow-headers",
                                "access-control-allow-methods",
                                "access-control-allow-origin",
                                "access-control-max-age",
                                "X-Frame-Options")
                        .allowCredentials(CrossOrigin.DEFAULT_ALLOW_CREDENTIALS)//允许Cookie跨域
                        .maxAge(3600);
            }
        };
    }
}

此时,可以发送自定义的cookie信息了,但是没看到session被传送到服务器,

此时的情况时:
Response Headers
Set-Cookie:SESSION=4bbd2abd-4aa0-42d9-a8f4-d6b212a83b7e;path=/;Secure;HttpOnly
注意到了这后面的HttpOnly 不太明白其中的意思 查找如下文章中
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie

Secure 可选
一个带有安全属性的 cookie 只有在请求使用SSL和HTTPS协议的时候才会被发送到服务器。然而,保密或敏感信息永远不要在 HTTP cookie 中存储或传输,因为整个机制从本质上来说都是不安全的,比如前述协议并不意味着所有的信息都是经过加密的。
注意:非安全站点(http:)已经不能再在 cookie 中设置 secure 指令了(在Chrome 52+ and Firefox 52+ 中新引入的限制)。
HttpOnly 可选
设置了 HttpOnly 属性的 cookie 不能使用 JavaScript 经由  Document.cookie 属性、XMLHttpRequest 和  Request APIs 进行访问,以防范跨站脚本攻击(XSS)。

一开始尝试关闭掉这两个配置,但似乎没起作用,可能我参数用错了
等于要使用Https协议,由于测试的时候一直是使用http。。。哎!
因为项目早就使用了阿里云证书,开启了Https,所以此处略过
更换成Https协议后,每次发送的cookie中终于看到携带了session了(本地cookie中也看到了保存的session)

在前后端分离的SpringBoot项目中集成Shiro权限框架

项目背景       公司在几年前就采用了前后端分离的开发模式,前端所有请求都使用ajax。这样的项目结构在与CAS单点登录等权限管理框架集成时遇到了很多问题,使得权限部分的代码冗长丑陋,CAS的各种...
  • u013615903
  • u013615903
  • 2017-12-12 14:13:47
  • 25459

nginx 配合 spring boot - docker 做动静分离和跨域

spring boot 、 spring cloud 、 docker 我就呵呵了,反正很火spring boot 主要做微服务,一般仅仅提供服务,逼格说的简单点,提供一个http请求,返回json。...
  • chenjianandiyi
  • chenjianandiyi
  • 2017-04-21 17:12:00
  • 5112

springMVC本地实现动静分离

动静分离是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。...
  • woshimuyi1025
  • woshimuyi1025
  • 2016-07-18 17:09:46
  • 1413

SpringBoot 前后端动静分离+集群 遇到的第一个问题:跨域session共享

关于跨域的文章  https://blog.csdn.net/freshlover/article/details/44223467关于跨域cookie携带  https://blog.csdn.ne...
  • zx1323
  • zx1323
  • 2018-04-16 01:50:54
  • 20

Springboot中实现跨域问题,实现前后端完全分离并方便测试.

1.什么是跨域?什么是不跨域? 解释一:同一个ip、同一个网络协议、同一个端口,三者都满足就是同一个域,否则就是 跨域问题了。而为什么开发者最初不直接定为一切可跨域的呢?默认的为什么都是不可跨域...
  • sinat_30026065
  • sinat_30026065
  • 2017-09-26 16:22:27
  • 943

实战——session共享(Spring Boot + Spring Session + Redis)

Spring Boot + Spring Session + Redis 进行session共享,nginx进行反向代理
  • jiangchenzhou
  • jiangchenzhou
  • 2017-09-03 15:34:51
  • 1680

前后端分离之Java后端

前后端分离的思想由来已久,不妨尝试一下,从上手开始,先把代码写出来再究细节。代码下载:https://github.com/jimolonely/AuthServer前言以前服务端为什么能识别用户呢?...
  • jimo_lonely
  • jimo_lonely
  • 2017-04-05 22:01:51
  • 12115

Spring boot 页面分离 (freemarker 分离)

1.静态资源路径 替换成相应的本地地址 properties文件,添加参数 sinaif.static.path=file:/usr/local/spring-cloud...
  • qing_mei_xiu
  • qing_mei_xiu
  • 2017-07-18 18:01:08
  • 647

SpringBoot和Vue实现前后端分离时跨域问题

使用SpringBoot和Vue搭建前后端分离框架时,遇见一个问题就是前端往后端提交的session每次都不相同,Vue端采用axios进行网络请求,以下为解决方案: 前端设置:在main.js 全...
  • u014271612
  • u014271612
  • 2018-03-18 11:14:08
  • 104

前后端分离,java配置跨域请求问题

需要的jar包 cors-filter.jar 在web.xml中加入以下配置       cors          com.thetransactioncompany.cors.CORSFilt...
  • athur666
  • athur666
  • 2017-04-25 14:45:46
  • 975
收藏助手
不良信息举报
您举报文章:SpringBoot 前后端动静分离+集群 遇到的第一个问题:跨域session共享
举报原因:
原因补充:

(最多只允许输入30个字)