Spring Security测试返回401(未授权)

时间:2017-01-11 16:11:51

标签: java spring security spring-mvc spring-security

在本文档Spring Security MVC Test中,介绍了如何使用Spring Security测试安全的资源。我按照提供的所有步骤操作,但访问受保护的资源仍然返回错误代码401(未经授权)。

这是我的测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
@SpringBootTest
@TestPropertySource(locations = "classpath:test.properties")
public class UserControllerTest {
    @Autowired
    private WebApplicationContext context;

    private MockMvc mockMvc;

    @Before
    public void setup() throws Exception {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
            .defaultRequest(
                    get("/api/users/1")
                            .with(user("test@test.com").password("test"))
                            .with(httpBasic("sc68", "adminpass"))
            )
            .apply(springSecurity())
            .build();
    }

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

    @Test
    public void testProtectedResource() throws Exception {
        mockMvc.perform(get("/api/users/1"))
                .andExpect(status().isOk());
    }
}

我的ResourceServerConfiguration:

@Throws(Exception::class)
    override fun configure(http: HttpSecurity) {
        http.authorizeRequests()
                .antMatchers("/api/users/register").permitAll()
                .antMatchers("/api/articles").permitAll()
                .anyRequest().authenticated().and()
                        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and(    )
            .csrf().disable()
}

如果您想查看整个项目,可以找到它here。我已经尝试了不同的测试运行器和教程中描述的所有内容,但是我找不到如何在测试期间获得经过身份验证的用户的解决方案。

1 个答案:

答案 0 :(得分:0)

我认为你不应该同时拥有user()httpBasic()user()用于基于表单的身份验证,并将使用UsernamePasswordAuthenticationToken创建SecurityContext。 httpBasic将创建base64编码的身份验证标头。

您的安全配置似乎缺少httpBasic()配置,它看起来像没有配置安全机制,只是一些匹配器。您可以看到示例here

相关问题