如何在Spring Boot Tests中跳过TestRestTemplate的身份验证?

时间:2018-03-11 18:59:56

标签: java spring-boot

以下是我的测试课程。 hello-world端点只返回一个包含文本的HTML页面,即Hello Stranger!

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class HelloWorldTest {

    @Autowired
    private HelloWorldController controller;

    @Autowired
    private TestRestTemplate restTemplate;

    @LocalServerPort
    private int port;

    @Test
    public void contextLoads() throws Exception {
        assertThat(controller).isNotNull();
    }

    @Test
    public void greetingShouldReturnDefaultMessage() throws Exception {

        String baseUrl = "http://localhost:" + port;

        assertThat(this.restTemplate.getForObject(baseUrl+"/hello-world", String.class))
                .contains("Hello Stranger!");
    }
}

这是我的安全配置:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/", "/home").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout()
            .permitAll();
    }
}

它只是将所有经过身份验证的用户重定向到登录页面

我尝试添加@WithMockUser注释或在我的测试目录中添加另一个安全配置类来覆盖默认配置。但到目前为止,似乎没有任何效果。

对于阅读文档的任何帮助或建议表示赞赏!

2 个答案:

答案 0 :(得分:0)

我设法通过首先创建另一个Web安全配置而不需要登录/授权来解决此问题,然后通过我的测试目录中的application.properties将@Profile添加到我的配置类和生产/ dev / test配置文件中(即添加“spring.profiles.active =测试”)。

不确定这是否是解决此问题的最佳方法,但现在可以使用。

答案 1 :(得分:0)

另一种对我有用的方法是覆盖运行集成测试的常规安全配置,如下所示:

@TestConfiguration
@Order(-101)
@EnableWebSecurity
class TestSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity security) throws Exception {
        security.httpBasic().and().formLogin().disable();
    }
}