Spring Boot 中 @Autowired 的配置属性为 null

2024-01-06

我有一个属性类

@ConfigurationProperties(prefix = ShiroProperties.SHIRO_PREFIX)
public class ShiroProperties {
  public static final String SHIRO_PREFIX = "shiro";

  private String urlLogin;
  private String urlSuccessed;

和一个配置类

@Configuration
@EnableConfigurationProperties({ ShiroProperties.class })
public class ShiroConfig implements ApplicationContextAware {

  ApplicationContext applicationContext;
  @Autowired
  private ShiroProperties shiroProperties ;

shiroProperties 为 null,但我可以在使用的 ShiroConfig 中找到它的值

applicationContext.getBean(ShiroProperties.class)

我的应用程序类:

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

太奇怪了,我可以在其他项目中使用类似的代码运行成功,但是这个。


我遇到了同样的问题,正如@Dean所说,我所做的就是把LifecycleBeanPostProcessorbean是另一个配置类,在另一个配置类中配置其他Shiro,见下面的例子:

@Configuration
public class ShiroLifecycleBeanPostProcessorConfig {

    /**
     * 
     * 
     * @return
     */
    @Bean(name = "lifecycleBeanPostProcessor")
    public LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
        return new LifecycleBeanPostProcessor();
    }

}

Shiro 主要配置类:

@Configuration
@AutoConfigureAfter(value = ShiroLifecycleBeanPostProcessorConfig.class)
public class ShiroConfiguration {

    public static final String cacheFile = "encache.xml";
    private static final String active_cache_name = "activeSessionCache";

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 
     * 
     * @throws UnknownHostException
     */
    @Bean(name = "shiroFilter")
    @ConditionalOnMissingBean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager)
            throws UnknownHostException {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

        shiroFilterFactoryBean.setSecurityManager(securityManager);

        shiroFilterFactoryBean.setLoginUrl(ShiroSecurityUrls.LOGIN_PAGE);
        // shiroFilterFactoryBean.setSuccessUrl(ShiroSecurityUrls.LOGIN_SUCCESS_URL);
        shiroFilterFactoryBean.setUnauthorizedUrl("/error");

        Map<String, Filter> filters = new LinkedHashMap<String, Filter>();
        LogoutFilter logoutFilter = new LogoutFilter();
        logoutFilter.setRedirectUrl(ShiroSecurityUrls.LOGIN_PAGE);
        filters.put(DefaultFilter.logout.name(), logoutFilter);
        shiroFilterFactoryBean.setFilters(filters);

        Map<String, String> filterChainDefinitionManager = new LinkedHashMap<String, String>();

        filterChainDefinitionManager.put("/static/**", DefaultFilter.anon.name());
        filterChainDefinitionManager.put("/node_modules/**", DefaultFilter.anon.name());
        filterChainDefinitionManager.put("/pages/**", DefaultFilter.anon.name());

        filterChainDefinitionManager.put(ShiroSecurityUrls.LOGIN_PAGE, DefaultFilter.anon.name());
        filterChainDefinitionManager.put(ShiroSecurityUrls.LOGOUT_URL, DefaultFilter.logout.name());
        filterChainDefinitionManager.put(ShiroSecurityUrls.REGISTER_PROCESS_URL, DefaultFilter.anon.name());
        filterChainDefinitionManager.put("/**", DefaultFilter.user.name());

        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionManager);

        return shiroFilterFactoryBean;
    }

    /**
     * 
     * 
     * @throws UnknownHostException
     */
    @Bean(name = "securityManager")
    @DependsOn(value = { "ehCacheManager", "rememberMeManager", "sessionManager", "credentialsMatcher" })
    public DefaultWebSecurityManager securityManager(EhCacheManager ehCacheManager, RememberMeManager rememberMeManager,
            SessionManager sessionManager, CredentialsMatcher credentialsMatcher) throws UnknownHostException {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        // 1. Cache Support
        securityManager.setCacheManager(ehCacheManager);
        // 2. Session Support,inject the cacheManager from securitymanager
        securityManager.setSessionManager(sessionManager);
        // 3. Rememberme Support
        securityManager.setRememberMeManager(rememberMeManager);

        // 4. JDBC,LDAP Realm implements
        Collection<Realm> authorizingRealms = Lists.newArrayList(shiroDatabaseRealm(credentialsMatcher),
                shiroActiveDirectoryRealm(credentialsMatcher));
        securityManager.setRealms(authorizingRealms); // inject the cacheManager
                                                        // from securitymanager
        if (securityManager.getAuthenticator() instanceof ModularRealmAuthenticator) {
            ModularRealmAuthenticator modularRealmAuthenticator = (ModularRealmAuthenticator) securityManager
                    .getAuthenticator();
            modularRealmAuthenticator.setAuthenticationStrategy(new FirstSuccessfulStrategy());
        }

        return securityManager;
    }
}

希望这段代码对你有帮助,谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 中 @Autowired 的配置属性为 null 的相关文章

随机推荐