我正在使用STS和Gradle插件开发Spring Boot应用程序。为了避免我们的Selenium测试需要登录,我有一个不同的配置。
因此,在src/test/java/etc
中,我有类似以下内容的东西:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
public static class SecurityConfig extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.authorizeRequests().anyRequest().permitAll();
}
}
在src/main/java
中,我有一个相当的类来配置登录等,要求所有页面都需要登录。
如果我通过Gradle插件(bootRun)运行应用程序,一切正常。
然而,如果我直接通过Eclipse运行或调试它(例如右键单击项目,选择Run As->Spring Boot App或通过Spring或Java视图中的运行/调试按钮单击),那么测试配置会被应用,因此可以在没有登录的情况下访问所有页面。
我猜想在以这种方式启动应用程序时,测试类被包含在类路径中。有没有简单的方法可以防止这种情况发生?
@Profile("test")
以及在测试中添加@ActiveProfiles("test")
来解决这个问题。这将使得该 bean 只在该配置文件下被激活。请参考 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#testcontext-ctx-management-env-profiles。 - zapl