无法在春季启动中自动接线SessionRegistry

时间:2018-08-03 06:33:27

标签: java spring spring-boot autowired

我有从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 个答案:

答案 0 :(得分:3)

您需要在您的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();

    }
}