Tengo aplicación de inicio de la primavera lo que emigró de aplicación de la primavera. Todo funciona bien. He decidido añadir un nuevo funcional que conecta con SessionRegistry. Y me encontré con que no podía ser sessionRegistry autowired. Simplemente muestra No se pudo Autowire. No hay granos de tipo 'SessionRegistry encontrado. Pensé que podría haber problemas de idea y trató de ejecutar el proyecto con estas cuestiones de compilación pero la aplicación no se inicia:
Error al iniciar
Descripción:
Parámetro 0 de constructor en SessionUtils requiere un grano de tipo 'org.springframework.security.core.session.SessionRegistry' que no pudo ser encontrado.
Acción:
Considere la definición de un grano de tipo 'org.springframework.security.core.session.SessionRegistry' en su configuración.
Este es un ejemplo de mi clase en la que trato de usar 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();
}
}
}
}
}
}
He intentado añadir @ComponentScan, pero no sirvió de nada. Mi código 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);
}
}
¿Alguien tiene sugerencias?
Es necesario añadir el grano en su configuration
clase:
@Bean
SessionRegistry sessionRegistry() {
return new SessionRegistryImpl();
}
Se puede mantener en su clase de aplicación.
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public SessionRegistry sessionRegistry() {
return new SessionRegistryImpl();
}
}