我有考试
@Test
public void testGetGrandSlamTokenRaw() throws Exception {
this.mockMvc
.perform(get("/some/url"))
.andDo(print())
.andExpect(status().isOk());
}
我有一个自定义的身份验证提供程序,它抛出AuthenticationException
,并确认它与调试器一起运行。
我有一个自定义身份验证过滤器,该过滤器扩展了AbstractPreAuthenticatedProcessingFilter
,并且我们将continueFilterChainOnUnsuccessfulAuthentication
设置为false。
我有一个正在运行的自定义故障处理程序(已通过调试器确认)
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
...
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
}
所以我希望测试失败并显示401状态,因为我没有在测试设置中添加用户。但是,除了我声明状态为OK之外,没有导致测试失败,而是测试发生了错误,但我的自定义身份验证提供程序抛出了异常。
如果我将continueFilterChainOnUnsuccessfulAuthentication
设置为true(默认值),则不会发生这种情况,并且测试确实会返回401而不是出错。