spring security测试用例,用于执行基本认证

时间:2017-02-21 21:52:26

标签: junit spring-security

我有一个Junit测试用例,我使用

对应用程序进行身份验证
 public static MockHttpServletRequestBuilder prepare(
            final MockHttpServletRequestBuilder request,
            final Participant user)
    {
        return request.contentType(MediaType.APPLICATION_JSON)
                .with(user(user.getAccount().getUsername())
                        .authorities(user.getAccount().getRole().getAuthorities()));
    }

根据提供的文件提供的东西 https://spring.io/blog/2014/05/23/preview-spring-security-test-web-security,它实际上并不使用用户名和密码进行身份验证,但它只是根据我们传递的权限配置SecurityContext。

就我而言,每当用户登录应用程序时,我都会记录一个事件。我想编写一个测试用例来检查用户登录应用程序时是否存储了事件。但是,由于Spring安全性甚至不对用户进行身份验证,因此实际上并没有调用

onSuccessfulAuthentication(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response, final Authentication authResult)

我正在记录事件的BasicAuthenticationFilter

有没有办法按照我的要求模拟测试用例?

1 个答案:

答案 0 :(得分:0)

我能够找到解决方案。这是代码

@Autowired
private WebApplicationContext context;  

@Test
public void testcase1(){
    MockMvcBuilders.webAppContextSetup(this.context)
                        .apply(SecurityMockMvcConfigurers.springSecurity())
                        .build();
    final MvcResult mvcResult = this.mvc
                    .perform(get("/").with(httpBasic("test1","password")))
                    .andDo(print())
                    .andExpect(status().isOk())
                    .andReturn();
}

我在Spring安全配置文件中添加了一个CustomBasicAuthenticationFilter(我将BasicAuthenticationFilter的onSuccessfulAuthentication方法覆盖)。

请参阅Spring Security Token based Authentication了解配置类和CustomBasicAuthenticationFilter