开发者社区> 问答> 正文

spring boot+spring session+redis集成session共享问题?报错

是这样,公司在做一个项目,其中涉及到了跨域问题,按照平常的套路就是,用户登录完成,保存session中,每次调用接口时检查session中的用户登录状态,但是跨域会导致session丢失,无法通过检索session来检查用户的登录状态,众里寻他千百度,最终使用的是spring session+redis的方案。

pom文件的配置:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
   <groupId>org.springframework.session</groupId>
   <artifactId>spring-session-data-redis</artifactId>
</dependency>

redis服务器连接配置:

@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 1800)
public class SessionConfig {

    @Bean
    public JedisConnectionFactory connectionFactory() {
        JedisConnectionFactory connection = new JedisConnectionFactory();
        connection.setHostName("localhost");
        connection.setPort(6379);
        return connection;
    }
}

springSession配置:

public class SessionInitializer  extends AbstractHttpSessionApplicationInitializer {
    public SessionInitializer() {
        super(SessionConfig.class);
    }
}

以上都是按照网上的说法配置的。

然后运行:

一、使用spring-boot:run方式运行

    完全没有问题,打开redis,sessionId也存进去了

二、使用Tomcat容器运行

    出错:

[2017-12-13 10:50:01,495] Artifact demo-springSesionRedis:war: Error during artifact deployment. See server log for details.

接下来就是排错找问题:

首先根据控制台报错信息,重新部署了一遍文件,依旧如此

然后把和Spring session+redis相关的配置去掉,两种方式运行都没问题,所以问题应该是错在springSession+redis整合上面了

突发奇想,在spring-session-data-session依赖上面加上provided作用域,如下:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
   <groupId>org.springframework.session</groupId>
   <artifactId>spring-session-data-redis</artifactId>
   <scope>provided</scope>
</dependency>

再次启动项目,虽然项目没有出问题,正常启动,但是这样一来,在tomcat容器中启动时,spring session+redis就没作用了

环境:

idea+spring boot 1.5.9.RELEASE+tomcat 8.0.9

有没有哪个大佬出现过和我同样的问题,希望各位大佬不吝赐教。

展开
收起
爱吃鱼的程序员 2020-06-07 22:14:20 951 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你的tomcat里面存在非标准tomcat8提供的jar么?

    并没有,就是官方下载的,没动过

    没有看到一行错误信息,seeserverlog,有错误日志吗?

    回复 @一个大苹果:怎么解决的呢?没有日志,问题已经解决了,感谢回答

    以上配置没有任何问题但是 
    如果在配置了context-path不是默认的/的情况下 cookie的path默认和context-path一致,就会导致cookie的作用域不一致导致无法共享,此时就必须加上cookie的path为/ 

    这是博客地址
    https://blog.csdn.net/hyz792901324/article/details/85319234

    2020-06-07 22:14:36
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Redis在唯品会的应用实践——架构演进与功能定制 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载