我有一个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
的。
有没有办法按照我的要求模拟测试用例?
答案 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