正在redis服务器上设置春季会话



我正在使用spring-boot编写我的rest api。我正试图在redis服务器上维护用户的会话。Redis已在默认端口6379上启动并运行。我已经使用生菜罐连接到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> 

这是我试图查看用户是否已根据其活动会话登录的代码片段,如果会话在那里,则我将返回用户。否则,我会记录他们,然后在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;
}
}

这个用户是我试图设置为会话值和uuid作为键的对象。这就是我尝试连接到redis服务器的方式

@Configuration
@EnableRedisHttpSession
public class SessionConfig extends AbstractHttpSessionApplicationInitializer {
@Bean
public LettuceConnectionFactory connectionFactory() {
return new LettuceConnectionFactory();
}
}

这就是我在application.properties中的内容

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

你知道这是怎么回事吗?

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

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

通过扩展AbstractHttpSessionApplicationInitializer,确保名称为springSessionRepositoryFilter的SpringBean在我们的Servlet容器中为每个请求注册。欲了解更多信息,请参阅本

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> 

另一个方面来自redis服务器,一旦你设置了会话,根据你设置的值,你需要检索它。redis支持六种类型的string, list, set, zset, hash and stream。在我的情况下,它是hash,所以要查看值,命令将是HGETALL <key>

您必须使用redis服务器的默认构造函数初始化与该服务器的连接。

return new LettuceConnectionFactory(new RedisStandaloneConfiguration(host, port));
  1. 您可以使用@value从属性文件中获取值,或者更好的方法是使用@ConfigurationProperties(prefix="spring.redis")标记redis@配置类

  2. 添加字段String host、int port以及相应的getter和setter。

最新更新