use*_*219 7 java spring spring-mvc spring-boot
我无法在测试中正确配置安全性.我的网络安全配置:
@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/**").hasRole("USER")
.and()
.httpBasic()
;
}
}
Run Code Online (Sandbox Code Playgroud)
我的测试班:
@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())
;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到404状态代码意味着没有执行安全层,因此在我的测试类中没有正确配置它.我试图将类切换@ContextConfiguration
到@SpringApplicationConfiguration
没有成功.
对您的代码进行以下修改:
@Autowired
private FilterChainProxy filterChainProxy;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
this.mockMvc = webAppContextSetup(wac).dispatchOptions(true).addFilters(filterChainProxy).build();
}
Run Code Online (Sandbox Code Playgroud)
正如Spring Security 4.0.4的参考资料所述:
为了将Spring Security与Spring MVC Test一起使用,有必要将Spring Security添加
FilterChainProxy
为Filter
.还需要添加Spring SecurityTestSecurityContextHolderPostProcessor
以支持在带有Annotations的Spring MVC Test中作为用户运行.这可以使用Spring Security来完成SecurityMockMvcConfigurers.springSecurity()
.
例:
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
public class TestControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders
.webAppContextSetup(wac)
.apply(springSecurity()) //will perform all of the initial setup to integrate Spring Security with Spring MVC Test
.build();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10972 次 |
最近记录: |