【问题标题】:Could not autowire SessionRegistry in spring boot无法在 Spring Boot 中自动装配 SessionRegistry
【发布时间】:2019-01-10 23:46:21
【问题描述】:

我有从 spring 应用程序迁移的 spring boot 应用程序。一切正常。我决定添加一些与 SessionRegistry 相关的新功能。而且我发现 sessionRegistry 无法自动装配。 它只是显示无法自动装配。找不到 'SessionRegistry' 类型的 bean。 我认为这可能是想法问题,并尝试使用此编译问题运行项目,但应用程序无法启动:


应用程序启动失败


说明:

SessionUtils 中构造函数的参数 0 需要一个找不到的 'org.springframework.security.core.session.SessionRegistry' 类型的 bean。

行动:

考虑在你的配置中定义一个“org.springframework.security.core.session.SessionRegistry”类型的bean。

这是我尝试使用 SessionRegistry 的班级示例:

    import org.springframework.security.core.session.SessionRegistry;

import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.session.SessionInformation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class SessionUtils {

    private final SessionRegistry sessionRegistry;

    @Autowired
    public SessionUtils(SessionRegistry sessionRegistry) {
        this.sessionRegistry = sessionRegistry;
    }

    public void expireUserSessions(String username) {
        for (Object principal : sessionRegistry.getAllPrincipals()) {
            if (principal instanceof User) {
                UserDetails userDetails = (UserDetails) principal;
                if (userDetails.getUsername().equals(username)) {
                    for (SessionInformation information : sessionRegistry.getAllSessions(userDetails, true)) {
                        information.expireNow();
                    }
                }
            }
        }
    }
}

我尝试添加@ComponentScan,但没有帮助。 我的 Application.class 代码:

    import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
import org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;

/**
 * Main class for Spring Boot
 */
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class,
        FreeMarkerAutoConfiguration.class, HttpEncodingAutoConfiguration.class, WebMvcAutoConfiguration.class})
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

有人有建议吗?

【问题讨论】:

    标签: java spring spring-boot autowired


    【解决方案1】:

    您需要在 configuration 类中添加 bean:

    @Bean
    SessionRegistry sessionRegistry() { 
        return new SessionRegistryImpl(); 
    }
    

    您可以将它保存在您的应用程序类中。

    public class Application {
    
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
        @Bean
        public SessionRegistry sessionRegistry() {
            return new SessionRegistryImpl();
    
        }
    }
    

    【讨论】:

    • 非常感谢!真的很有帮助。
    猜你喜欢
    • 2018-12-27
    • 2021-04-02
    • 1970-01-01
    • 2016-01-06
    • 2019-06-27
    • 1970-01-01
    • 2020-02-09
    • 2017-10-18
    • 2017-03-28
    相关资源
    最近更新 更多