我在我的应用程序中使用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>
答案 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);
}
}