我无法在测试中正确配置安全性。我的网络安全配置:
@Configuration @EnableWebMvcSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/api/**").hasRole("USER") .and() .httpBasic() ; } }
我的测试课:
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration @ContextConfiguration(classes = {Application.class, AppConfig.class, WebMvcConfig.class, WebSecurityConfig.class}) @WebAppConfiguration public class TestControllerTest { @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setUp() { MockitoAnnotations.initMocks(this); this.mockMvc = webAppContextSetup(wac).dispatchOptions(true).build(); } @Test public void getTest() throws Exception { mockMvc .perform(get("/api/test")) .andExpect(status().isForbidden()) ; } }
我收到404状态代码,表示未执行安全层,因此在我的测试类中未正确配置它。我试图从切换类@ContextConfiguration来@SpringApplicationConfiguration没有成功。
@ContextConfiguration
@SpringApplicationConfiguration
对您的代码进行以下修改:
@Autowired private FilterChainProxy filterChainProxy; @Before public void setUp() { MockitoAnnotations.initMocks(this); this.mockMvc = webAppContextSetup(wac).dispatchOptions(true).addFilters(filterChainProxy).build(); }