将SpringSessionBackedSessionRegistry与Redis会话存储库一起使用

时间:2017-01-06 02:53:22

标签: spring spring-boot spring-security spring-session

我在我的应用程序中使用Spring Security和Spring Session(v1.3.1)。

我想使用SpringSessionBackedSessionRegistry作为我的会话注册表,使用Redis作为我的会话存储库。

SpringSessionBackedSessionRegistry的构造函数如下:

var summoner;
getSummonerData(req.params.playerName)
    .then(function (summonerData) {
        summoner = summonerData;
        return getMatchIds(summonerData.id);
    })
    .then(function (matchIds) {
        res.render('profile', {title: 'Profile', summoner: summoner});
    })
    .catch(function (err) {
        res.status(500).send(err);
    });

Redis存储库RedisOperationsSessionRepository实现:

SpringSessionBackedSessionRegistry(FindByIndexNameSessionRepository<ExpiringSession> sessionRepository) 

在给定SpringSessionBackedSessionRegistry的实例的情况下,如何构建RedisOperationsSessionRepository的实例?

为什么SpringSessionBackedSessionRegistry的构造函数不是:

FindByIndexNameSessionRepository<org.springframework.session.data.redis.RedisOperationsSessionRepository.RedisSession>

1 个答案:

答案 0 :(得分:8)

SpringSessionBackedSessionRegistry应该将FindByIndexNameSessionRepository<? extends ExpiringSession> sessionRepository作为构造函数参数,这是正确的。

我已打开PR解决问题,您可以跟踪here

同时,您可以在配置中使用原始FindByIndexNameSessionRepository来配置SpringSessionBackedSessionRegistry。这是一个例子:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private FindByIndexNameSessionRepository sessionRepository;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .and()
            .sessionManagement()
                .maximumSessions(1)
                .sessionRegistry(sessionRegistry());
    }

    @Bean
    @SuppressWarnings("unchecked")
    public SpringSessionBackedSessionRegistry sessionRegistry() {
        return new SpringSessionBackedSessionRegistry(this.sessionRepository);
    }

}