2017-07-15 83 views
2

我有一個彈簧休息mvc控制器,其URL爲「/ public/rest/vehicle/get」。在我的安全配置中,我已經定義任何/ public/rest的請求都不應該要求驗證。SpringBoot @WebMvcTest安全問題

http. 
      csrf().disable() 
      .authorizeRequests() 
      .antMatchers("/home/**", "/**", "/css/**", "/js/**", "/fonts/**", "/images/**", "/public/rest/**","/login*","/signin/**","/signup/**").permitAll() 
      .antMatchers("/property/**").authenticated() 
      .and() 
      .formLogin().loginPage("/login").permitAll() 
      .and().httpBasic().disable(); 

當我使用瀏覽器或任何其他方式啓動我的應用程序並提交請求時,此配置正常工作。 現在,我有一個測試類,它看起來像這樣,

@RunWith(SpringRunner.class) 
@WebMvcTest(VehicleController.class) 
public class VehicleControllerTest { 

    @Autowired 
    private MockMvc mockMvc; 

    @MockBean 
    private VehicleService vehicleService; 


    @Test 
    public void getVehicle() throws Exception { 
     given(this.vehicleService.get(0)). 
       willReturn(new VehicleEquipmentDTO()); 
     this.mockMvc.perform(get("/public/rest/vehicle/get").param("id","0")) 
       .andDo(print()) 
       .andExpect(status().isOk());//.andExpect(content().string("Honda Civic")); 
    }} 

現在,當我運行這個測試,它說

java.lang.AssertionError: Status 
Expected :200 
Actual :401 

當我打印請求響應,我看到它是在抱怨,因爲的安全。 「」錯誤消息=需要完全驗證來訪問此資源「 任何想法,爲什麼它不與我有的安全配置一起工作,以及有什麼辦法強制它使用正確的配置?在此先感謝

回答

3

終於找到原因。由於WebMvcTest只能進行分片測試,因此不需要安全配置。解決方法是明確導入它,如

@Import(WebSecurityConfig.class)