从spring-starter-security中排除网址

时间:2018-01-10 09:49:17

标签: java spring security

我使用springboot-starter-security时遇到问题。我想只保护不以" / api"开头的网址,所有网址如" / api"或" / api /"或" / api / **"一定不能保证。

在WebSecurityConfigClass中我有:

@Override
    public void configure(WebSecurity web) throws Exception {

        web.ignoring().antMatchers("/api*");

    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
        .inMemoryAuthentication()
        .withUser("user").password("password").roles("USER");
    }

在应用程序中,我有两个不同的控制器,webcontroller和restcontroller。目前还没有实现网络,但它必须解决我想要保护的网址,其余控制器管理我不需要身份验证的网址。 我有一个其他控制器的测试类,所有测试失败,因为他们期望200状态,但他们收到401.例如:

@Test
public void testStatus200() throws Exception{
    mvc.perform(get("/api")).andExpect(status().isOk());
}

由于状态为401而不是200,此测试失败。为什么?

1 个答案:

答案 0 :(得分:0)

我解决了,测试类没有使用websecurityconfig类。 我通过添加WebSecurityConfig的显式导入作为类注释来修复:

@RunWith(SpringRunner.class)
@WebMvcTest(controllers=ARestController.class)
@Import(WebSecurityConfig.class) // <---
public class ARestControllerTest { ... }