Could not autowire SessionRegistry in spring boot

Den B :

I have spring boot application what migrated from spring application. Everything works fine. I decided to add some new functional which connected with SessionRegistry. And I found that sessionRegistry could not be autowired. It just displays Could not autowire. No beans of 'SessionRegistry' type found. I thought that it might be idea issues and tried to run project with this compilation issues but application doesn't start:


APPLICATION FAILED TO START


Description:

Parameter 0 of constructor in SessionUtils required a bean of type 'org.springframework.security.core.session.SessionRegistry' that could not be found.

Action:

Consider defining a bean of type 'org.springframework.security.core.session.SessionRegistry' in your configuration.

This is example of my class where I try to use 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();
                    }
                }
            }
        }
    }
}

I tried to add @ComponentScan, but it didn't help. My Application.class code:

    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);
    }
}

Does anyone have suggestions?

Golam Mazid sajib :

You need to add the bean in your configuration class:

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

You can keep it in your Application class.

public class Application {

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

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

    }
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=113634&siteId=1