我有从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);
}
}
有人有建议吗?
答案 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();
}
}