我尝试在spring-security
中使用UserDetailsService
来实现我的身份验证逻辑。但是,在HTTP请求期间不会调用UserDetailsService
。下面是代码:
第一个
我用一个测试来测试身份验证逻辑,下面是测试的核心代码:
MvcResult addMvcResult = mockMvc.perform(post("/habit/friend/addById")
.with(SecurityMockMvcRequestPostProcessors.httpBasic("Joey", "password"))
.contentType("application/json")
.content(StringUtils.toJSONString(addFriendRequestByIdDTO)))
.andExpect(status().isOk())
.andReturn();
该日志显示身份验证头是通过spring-test插入的:
MockHttpServletRequest:
HTTP Method = POST
Request URI = /habit/friend/addById
Parameters = {}
Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"47", Authorization:"Basic Sm9leTpwYXNzd29yZA=="]
Body = {
"currentUserId" : 1,
"friendUserId" : 2
}
Session Attrs = {org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN=org.springframework.security.web.csrf.DefaultCsrfToken@3a48c398}
但是,身份验证失败了,我得到了一个403,而且CustomUserDetailsService
从来没有被调用过,为什么?
1条答案
按热度按时间uxhixvfz1#
您的问题似乎与CSRF有关,而不是UserDetailsService的实现未注册有关。从Spring 4.x开始,默认情况下启用CSRF保护,除非您像下面这样将其关闭
您将得到403个错误。