我是靠谱客的博主 沉默绿茶,最近开发中收集的这篇文章主要介绍记录初学前端开发遇到的跨域和cookie的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

初学前端,目的也不是要掌握得多深入,只要能够把自己的一些小工具的操作界面做出来就行。结果一上来就遇到几个问题。
后端做好了,登录用的shiro,使用postman测试接口,一切正常,但登录页面做出来,chrom上一调试,就出问题了。
首先就是跨域的问题。
我就想问一下,只要前后端分离,是不是就一定跨域了?因为前端应用与后端服务即使是在一台服务器上部署,端口也不相同。
有一个办法说是用nginx代理解决,因为我没有使用nginx所以没有去了解,我猜的话,是不是前端后台在nginx上使用同一个端口,通过路径来分别转发,这样来解决的跨域?留待以后求证吧。
那还有个办法就是Cors拦截器了。根据网上的介绍,配置一个CorsConfig,解决了跨域的问题。
但是登录没有问题,登录后就又出问题了,还是跨域。
一分析,是shiro的拦截器比cors的拦截器先生效。那么解决方案还是网上查的,把cors拦截器的顺序放到第一位:
@Configuration
public class CorsConfig{
    private CorsConfiguration buildConfig(){
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.addAllowedOriginPattern("*");
        corsConfiguration.addAllowedOrigin("http://localhost:63343");
        corsConfiguration.setAllowCredentials(true);
        corsConfiguration.setMaxAge(3600L);
        return corsConfiguration;
    }

    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
    }
}

主要是bean.setOrder(0); 这一句。至于拦截器怎么生效的,就要以后研究一下springboot框架了。反正就是注入吧。

跨域的问题解决后,跟着就是登录后的请求,还是取不到登录信息。
跟postman上测试的报文一对比,发现就是浏览器在请求的时候,没有带cookie,没有jsessionid(这个后端在登录的时候是set-cookie给了的)。然后又是一通百度。
依次解决了以下问题:
前端:
1、AJAX发送请求的时候设置withCredentials=true
2、把服务的localhost改成127.0.0.1
后端:(都不确定是不是都是必须的)
都是在cors里面处理的:
1、setAllowCredentials(true);
2、addAllowedOrigin("http://localhost:63343"); // 这个其实可能没有必要,因为前端使用localhost也是带不出cookie的,要使用127.0.0.1,跟这个配置也不符合。

总之,现在是可以往后继续了。

最后

以上就是沉默绿茶为你收集整理的记录初学前端开发遇到的跨域和cookie的问题的全部内容,希望文章能够帮你解决记录初学前端开发遇到的跨域和cookie的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部