我正在尝试为我的spring安全应用程序实现remember函数。我也用了redis。我配置了, SpringSessionBackedSessionRegistry
豆。但当我试着
@Autowired FindByIndexNameSessionRepository
我犯了以下错误,
原因:java.lang.illegalargumentexception:sessionrepository不能为null
代码如下:,
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private FindByIndexNameSessionRepository<? extends Session> sessionRepository;
@Bean
public SpringSessionBackedSessionRegistry sessionRegistry() {
return new SpringSessionBackedSessionRegistry(this.sessionRepository);
}
}
``` `Handler.java` ```
@Component
public class Handler {
private @Autowired SessionRegistry sessionRegistry;
private @Autowired FindByIndexNameSessionRepository<? extends Session> sessionRepository;
}
和redis会话配置,
@Configuration
@EnableSpringHttpSession
public class SessionConfig {
private final RedisConnectionFactory redisConnectionFactory;
public SessionConfig(ObjectProvider<RedisConnectionFactory> redisConnectionFactory) {
this.redisConnectionFactory = redisConnectionFactory.getIfAvailable();
}
@Bean
public RedisOperations<String, Object> sessionRedisOperations() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(this.redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
@Bean
public RedisSessionRepository redisSessionRepository(RedisOperations<String, Object> sessionRedisOperations) {
return new RedisSessionRepository(sessionRedisOperations);
}
}
我会犯这样的错误,
原因:java.lang.illegalargumentexception:sessionrepository不能为null原因:org.springframework.beans.beaninstantiationexception:未能示例化[org.springframework.session.security.springsessionbackedsessionregistry]:包含bean“securityconfig”的循环引用-请考虑将工厂方法声明为独立于其包含示例的静态。工厂方法“sessionregistry”引发异常;嵌套异常为java.lang.illegalargumentexception:sessionrepository不能为null,原因是:org.springframework.beans.factory.beancreationexception:创建名为“sessionregistry”的bean时出错,该bean在类路径资源[securityconfig.class]中定义:通过工厂方法示例化bean失败;嵌套异常为org.springframework.beans.beaninstantiationexception:未能示例化[org.springframework.session.security.springsessionbackedsessionregistry]:涉及包含bean“securityconfig”的循环引用-考虑将工厂方法声明为静态,以独立于其包含示例。工厂方法“sessionregistry”引发异常;嵌套异常为java.lang.illegalargumentexception:sessionrepository不能为null
它还说,
没有'findbyindexnamesessionrepository<的bean?找到扩展会话>'类型。
我做错什么了?我怎样才能解决这个问题?有人能帮我吗?提前谢谢。
1条答案
按热度按时间thigvfpy1#
也许,我不确定,因为这个循环依赖错误。。。
在任何情况下,问题的发生可能是因为你实际上没有
FindByIndexNameSessionRepository
注入到您的spring上下文中,至少不是您试图配置的,而是一个SessionRepository
,因为您正在定义类型为的beanRedisSessionRepository
这个接口实现SessionRepository
,不是FindByIndexNameSessionRepository
. 拜托,试着用RedisIndexedSessionRepository
相反,类似于: