在redis服务器上设置spring会话

5f0d552i  于 2021-06-09  发布在  Redis
关注(0)|答案(2)|浏览(373)

我正在使用springboot编写restapi。我正在尝试维护redis服务器上的用户会话。redis在默认端口上启动并运行 6379 . 我已经用莴苣jar连接到redis服务器。但我的会话似乎没有在redis服务器上设置。我尝试使用uuid获取session对象集,它返回如下内容

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;
    }
}

这个用户就是我试图设置为会话值和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

你知道这是怎么回事吗?
lh80um4z

lh80um4z1#

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

return new LettuceConnectionFactory(new RedisStandaloneConfiguration(host, port));

可以使用从属性文件中获取值 @value 或者更好的方法是用 @ConfigurationProperties(prefix="spring.redis") 添加字段string host、int port和各自的getter和setter。

omqzjyyz

omqzjyyz2#

好的,我自己做的,我在session config类中做了一些更改,并通过扩展 AbstractHttpSessionApplicationInitializer ```
@EnableRedisHttpSession
public class SessionConfig {

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

}

通过扩展 `AbstractHttpSessionApplicationInitializer` ,确保以 `springSessionRepositoryFilter` 在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` . 在我的例子中,它是散列的,以便查看命令的值 `HGETALL <key>` 

相关问题