使用 Java Config 时未定义名为 'springSecurityFilterChain' 的 Bean



我在获取SpringMVC&Spring Security与Java Config。我使用初始化器来执行初始化:

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
 * Profile the app runs in.
 */
private final String activeProfile = EnvironmentProfiles.DEV;
/**
 *
 * @return
 */
@Override
protected Class<?>[] getRootConfigClasses() {
    if (this.activeProfile.equals(EnvironmentProfiles.PRODUCTION)) {
        return new Class[]{ProductionMainConfig.class};
    } else {
        return new Class[]{DevMainConfig.class};
    }
}
/**
 *
 * @return
 */
@Override
protected Class<?>[] getServletConfigClasses() {
    if (this.activeProfile.equals(EnvironmentProfiles.PRODUCTION)) {
        return new Class[]{ProductionWebMvcConfig.class};
    } else {
        return new Class[]{DevWebMvcConfig.class};
    }
}
/**
 *
 * @return
 */
@Override
protected String[] getServletMappings() {
    return new String[]{"/"};
}
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    super.onStartup(servletContext);
    servletContext.setInitParameter("spring.active.profile", this.activeProfile);
}

在AppInitializer中,activeProfile只是通过上下文init参数设置活动配置文件的一种方式。

ProductionWebMvcConfig&DevWebMvcConfig类是对WebMvcConfigurerAdapter的扩展,其中配置了视图解析器等。

我的DevMainConfig&ProductionMainConfig类类似于包含其他配置类的RootConfiguration类。

@Configuration
@Profile(EnvironmentProfiles.DEV)
@Import(value = {
    DevDataSourceConfig.class,
    DevInfrastructureConfig.class,
    DevRepositoryConfig.class,
    DevServiceConfig.class,
    DevSecurityConfig.class,
    DevWebMvcConfig.class
})
@ComponentScan("org.rz.app.conf.spring")
public class DevMainConfig {
    /**
     * Logger.
     */
    private static final Logger LOG = LoggerFactory.getLogger(DevMainConfig.class);
    /**
     * Application environment.
     */
    @Autowired
    private Environment env;
    /**
     * {@inheritDoc}
     */
    @PostConstruct
    public void initApp() {
        if(LOG.isInfoEnabled())
            for (String profile : env.getActiveProfiles()) {
                LOG.info("Detected Spring profile: {}", profile);
            }
    }
}

我还有一个AppSecurityInitializer类,它扩展了AbstractSecurityWebApplicationInitializer。该类用于设置Spring Security"springSecurityFilterChain",因此不需要进一步配置。

Tomcat正确地检测到了配置,因为它正在将以下消息打印到日志中。

Spring WebApplicationInitializers detected on classpath: [org.rz.app.conf.spring.AppSecurityInitializer@71d07e60, org.rz.app.conf.spring.AppInitializer@5a757797]

我没有web.xml或任何其他xml配置文件,但除外

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined

仍然存在。

有什么想法吗?谢谢

好的。问题解决了。

在另一个Tomcat7(同一版本)中重新部署该应用程序解决了这个问题。

相关内容

  • 没有找到相关文章

最新更新