美文网首页我爱编程
Spring Boot+AngularJS跨域及sessionI

Spring Boot+AngularJS跨域及sessionI

作者: 没有故事的老大爷 | 来源:发表于2018-06-26 23:36 被阅读0次
  1. java后台跨域配置
  • 增加一个跨域配置类,如下
@Configuration
public class CorsConfig {

    @Bean
    public CorsFilter corsFilter() {
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        final CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.setAllowedOrigins(Arrays.asList("*"));
        config.setAllowedHeaders(Arrays.asList("*"));
        config.setAllowedMethods(Arrays.asList("*"));
        config.setMaxAge(300L);
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);

    }
}

  1. 存在的问题
String sessionId = request.getSession().getId();  // request.getRequestedSessionId();
log.info("sessionId is {}", sessionId);
redisTemplate.opsForValue().set(sessionId + UserConstance.SESSION_USER_ID, userDTO.getId());
redisTemplate.opsForValue().set(sessionId + UserConstance.SESSION_USER, userDTO);
  • 拦截器验证用户是否登录
log.info("sessionid is {}", request.getRequestedSessionId());
Long userId = (Long) redisTemplate.opsForValue().get(request.getRequestedSessionId() + UserConstance.SESSION_USER_ID);

此时存在的问题是被拦截的接口都无法通过,报错:尚未登录。 因为每次请求的sessionId都是新的。

  1. 解决sessionId每次都是新的问题

这是因为java后端设置了config.setAllowCredentials(true); 但是angular前台没有相应的设置,前台加上:withCredentials: true
参考文章: Spring Boot+AngularJS中因为跨域导致Session丢失

  1. 引入了新的问题:sessionId为null
  • 因为我在解决上个问题的时候前台请求加上了withCredentials: true,但却把登录时获取sessionId的方法改为了request.getRequestedSessionId()。当客户端第一次请求的时候,sessionID自然是null的。所以发现sessionId一直null。纠结了我半天。

  • 同时上面的config.setAllowedOrigins(Arrays.asList("*"));不能配置为通配, 要设置成具体你允许的ip:port.

  1. 所以总结一下就是

a. 后台要有CorsConfig;
b. 前台请求设置:withCredentials: true
c. sessionId的获取:首次登录使用request.getSession().getId();,后续验证使用request.getRequestedSessionId();

作者 @没有故事的老大爷
我好像是该找个女朋友了

相关文章

  • Spring Boot+AngularJS跨域及sessionI

    java后台跨域配置 增加一个跨域配置类,如下 存在的问题 服务端id request.getSession()....

  • 响应头设置跨域和Spring注解跨域

    CORS跨域原理详解Spring解决跨域 响应头设置跨域 Spring注解跨域@CrossOrigin 可添加到方...

  • 2018-12-11

    spring security 的跨域问题 spring security跨域设置 在spring-sercuri...

  • 跨域配置

    SpringBoot跨域配置 我们的后端使用Spring Boot。Spring Boot跨域非常简单,只需书写以...

  • springmvc跨域

    1.普通跨域 spring4.2及以上增加注解@CrossOrigin就可以了 2.json跨域 前端会发送两次请...

  • 跨域

    跨域资源共享 CORS 详解什么是跨域及怎么解决跨域问题?

  • 2019-04-01

    Spring Boot轻松跨域:Spring Boot中采用注解轻松实现跨域的一个基础例子 1.项目结构,conf...

  • SpringBoot+Vue数据交互

    后端框架Spring Boot,前端框架vue 1. 跨域+携带cookie 跨域-携带cookie 2. 拦截器...

  • Springmvc支持跨域

    需要spring mvc版本4.2及以上 MVC里面需要配置: mvc:cors的配置处理get请求的跨域和非简单...

  • Spring 常用技巧

    Spring md5加密工具 从Spring容器中随时获取request spring 允许跨域访问 使用spri...

网友评论

    本文标题:Spring Boot+AngularJS跨域及sessionI

    本文链接:https://www.haomeiwen.com/subject/rdymyftx.html