当前位置: 首页 > 知识库问答 >
问题:

在redis服务器上设置spring会话

祁杰
2023-03-14

我正在使用spring Boot编写rest API。我正在努力维护redis服务器上的用户会话。Redis在默认端口6379上启动并运行。我已经使用lettuce jar连接到redis服务器。但是好像我的会话没有在redis服务器上设置。我尝试使用uuid设置会话对象,它返回如下所示

127.0.0.1:6379> get 02978830-2f35-47b7-a367-1f48e40d0ea0
(nil)

从redis cli,我能够设置和获得关键值。

127.0.0.1:6379> set 123 123dummy
OK
127.0.0.1:6379> get 123
"123dummy"
127.0.0.1:6379> 

这是一个代码片段,我试图查看用户是否已经登录,取决于他们的活动会话,如果会话在那里,那么我返回用户。否则,我会记录em,然后在redis服务器上设置会话,然后返回用户。

UserAttributes findUserByEmailIdOrPhoneNumber(HttpServletRequest request,
      @RequestParam(value = "userLoginWay", required = false) String userLoginWay,
      @RequestParam(value = "userPassword", required = false) String userPassword,
      @RequestParam(value = "session", required = false) String session) {
    if(request.getSession().getAttribute(session) != null) {
        //we have session return user
        return user;
    } else {
        login(userLoginWay, userPassword)
        //set the session in redis here
        String sessionUuid = UUID.randomUUID().toString();
        request.getSession().setAttribute(sessionUuid, user);
        return user;
    }
}
@Configuration
@EnableRedisHttpSession
public class SessionConfig extends AbstractHttpSessionApplicationInitializer {

    @Bean
    public LettuceConnectionFactory connectionFactory() {
        return new LettuceConnectionFactory();
    }

}
#Configuring Redis server to manage sessions
spring.session.store-type=redis
spring.redis.host=localhost
spring.redis.port=6379

共有1个答案

上官德寿
2023-03-14

好的,我自己得到了它,我在会话配置类中做了一些更改,并通过扩展AbstractHttpSessionApplicationInitializer来初始化它

@EnableRedisHttpSession
public class SessionConfig {

    @Bean
    public LettuceConnectionFactory connectionFactory() {
        return new LettuceConnectionFactory();
    }
}

通过扩展AbstractHttpSessionApplicationInitializer,确保每个请求都在Servlet容器中注册名为SpringSessionRepositoryFilter的Spring Bean。有关更多信息,请参阅

public class SessionConfigInitializer extends AbstractHttpSessionApplicationInitializer {

    public SessionConfigInitializer() {
        super(SessionConfig.class);
    }
}

在此之后,当我在redis服务器中查看时,我可以看到如下所示

127.0.0.1:6379> keys '*'
1) "spring:session:expirations:1597497540000"
2) "spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME:admin"
3) "spring:session:sessions:expires:dc2172eb-2282-4600-9cd3-7f5d9bbb62b8"
4) "spring:session:sessions:dc2172eb-2282-4600-9cd3-7f5d9bbb62b8"
127.0.0.1:6379> 
 类似资料:
  • 现在我有了server.cert和pkcs8_key.pem文件,我就这样创建了服务器: 类路径配置正确。 我得到的错误堆栈:

  • 我试图下载库从nexus仓库和它falied下载,与下一个错误:"不能解决org. 这是pom。我写的xml- 这是设置。我写的xml- 谁能帮帮我,告诉我哪里做错了?

  • 问题内容: 我正在创建一个云服务,其中有一个工作人员角色在后台运行一些繁重的处理,为此,我希望Redis实例在该工作人员本地运行。 我要做的是以部署工作人员时安装/配置Redis实例的方式设置工作人员角色项目。 Redis数据库将在每次作业启动时清除。 我已经看过了MSOpenTech的Redis用的NuGet安装Windows,但我不能确定我怎么会得上的工人角色实例这个工作。是否有聪明的方法来设

  • 我正在使用一个AmazonUbuntuEC2实例,它只有一个命令行界面。我想为该服务器设置UI,以便使用远程桌面工具进行访问。有没有办法将GUI应用于EC2实例?

  • 我试图在eclipse中设置jboss应用服务器,但我面临一些问题。我只在Eclipse中安装了jboss工具。因此,我的问题的第一部分是,jboss工具本身是否足以设置服务器,或者我需要额外的安装。

  • Debug 字段 该设置默认值是 false,当发生错误时,只返回错误信息本身。 当该字段设置为 true 时,当发生 panic 时,会将整个 panic 的错误堆栈信息返回给客户端,在用户进行 hprose 服务开发时,该设置可以帮助你快速定位错误位置。 ErrorDelay 字段 该设置为整型值,默认值为 10 秒。 该字段表示在调用执行时,如果发生异常,将延时一段时间后再返回给客户端。 在