我在哪里可以在spring-boot应用程序

时间:2017-01-07 05:54:34

标签: spring-boot spring-security

我有一个使用spring安全性的spring-boot应用程序,我希望一些会话到期,以便用户需要重新登录。经过一番挖掘,我应该能够像

那样做
List<Object> loggedUsers = sessionRegistry.getAllPrincipals();
    for (Object principal : loggedUsers) {
        if (principal instanceof User) {
            final User loggedUser = (User) principal;
            if (user.getUsername().equals(loggedUser.getUsername())) {
                List<SessionInformation> sessionsInfo = sessionRegistry.getAllSessions(principal, false);
                if (null != sessionsInfo && sessionsInfo.size() > 0) {
                    for (SessionInformation sessionInformation : sessionsInfo) {
                        sessionInformation.expireNow();
                            sessionRegistry.removeSessionInformation(sessionInformation.getSessionId());
                    }
                }
            }
        }
    }

我能在@Service类中做什么。我认为应该有一个SessionRegistry bean由spring-boot或spring security创建。因此我添加

@Autowired
SessionRegistry sessionRegistry;

但这会抛出一个未找到bean的异常。 然后我尝试在我的spring安全配置类中创建一个SessionRegistry bean。

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

我的服务中有这个bean,但getAllPrincipals()返回空。 我认为这是因为这个bean与登录应用程序实际使用的bean实例不同。会话。

所以,我的问题是这个会话注册表对象是在哪里创建的,我该如何将它连接到我的服务中?

弹簧安全配置

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AppSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    DataSource dataSource;

    JdbcUserDetailsManager detailManager;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

        auth.jdbcAuthentication().dataSource(dataSource)
                .passwordEncoder(new BCryptPasswordEncoder())
                .usersByUsernameQuery("select username,password, enabled from users where username=?")
                .authoritiesByUsernameQuery("select username, role from user_roles where username=?");
        detailManager = (JdbcUserDetailsManager) auth.getDefaultUserDetailsService();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.authorizeRequests().antMatchers("/service", "/test", "/test2", ".resources/**", "/firmware/**", "/public/**", "/mycallback")
                .permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();

    }

    @Bean
    public JdbcUserDetailsManager userDetailsManager()
    {
        return detailManager;
    }

}

0 个答案:

没有答案