>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring:Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 23481 个阅读者 刷新本主题
 * 贴子主题:  前端后分离Ajax跨域请求保证Session一致 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2019-03-08 00:50:13     消息  查看  搜索  好友  邮件  复制  引用

前后端分离的项目,使用Ajax请求一般都出现跨域的问题。
跨域的时候所创建的session是不会被浏览器保存下来的。所以每次进行跨域请求时,服务器都认为不是同一个浏览器所发起的请求,session也会不一样。以下将介绍如何保证session一致。

前端Ajax请求

$.ajax({
    url:url,
    <! -- 加上此部分 Start-- >
    xhrFields: {
       withCredentials: true
    },
    crossDomain: true,
    <! -- 加上此部分 End-- >
    success:function() {
    },
    error:function() {
    }
});
后端构建一个拦截器,对需要跨域访问的request头部重写
如:

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletResponse response= (HttpServletResponse) servletResponse;
    HttpServletRequest request=(HttpServletRequest)servletRequest;
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("XDomainRequestAllowed","1");
    filterChain.doFilter(servletRequest,servletResponse);
}
另外Spring boot的项目可以添加拦截配置,以下:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class AuthCorsFilter extends CorsFilter {

    public AuthCorsFilter() {
        super(configurationSource());
    }

    private static UrlBasedCorsConfigurationSource configurationSource() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        config.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return source;
    }
}

转自:https://segmentfault.com/a/1190000011811757


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->流程控制
  JavaWeb开发-->JavaWeb应用入门(Ⅰ)
  JSP与Hibernate开发-->数据库事务的并发问题的解决方案
  Java网络编程-->用Spring整合CXF发布Web服务
  精通Spring-->Vue Router路由管理器
  Vue3开发-->绑定表单
  SpringCloud Feign的分析
  Spring Boot 基于 JUnit 5 实现单元测试
  @SessionAttribute和@SessionAttributes的区别
  Spring Cloud构建微服务架构的断路器
  探讨通过Feign配合Hystrix进行调用时异常的处理
  一文详解微服务架构(好文值得细读)
  Dubbo源码解析之SPI:扩展类的加载过程
  带你逆袭kafka之路
  Spring Boot 整合 Ehcache
  3分钟让你明白JSON是什么
  nginx详解反向代理、负载均衡、LNMP架构上线动态网站
  反向代理、负载均衡!优秀的 Nginx 是如何做到的?
  Spring入门基础知识
  一篇文章概括Spring Cloud微服务教程
  Hibernate拦截器与监听器
  更多...
 IPIP: 已设置保密
楼主      
该用户目前不在线 nihaota 
  
威望: 0
级别: 新手上路
魅力: 1315
经验: 1315
现金: 2944
发文章数: 243
注册时间: 0001-01-01
 消息  查看  搜索  好友  邮件  复制  引用


讨债公司
发文章时间 2022-10-28 21:24:03
 IPIP: 已设置保密 1 楼     
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。