首页 文章

无法在spring boot中自动装配SessionRegistry

提问于
浏览
1

我有从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);
    }
}

有没有人有建议?

1 回答

  • 1

    您需要在 configuration 类中添加bean:

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

    您可以将它保存在Application类中 .

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

相关问题