spring-security 自定义UserDetailsService未被Spring启动调用

gajydyqb  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(286)

我尝试在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从来没有被调用过,为什么?

uxhixvfz

uxhixvfz1#

您的问题似乎与CSRF有关,而不是UserDetailsService的实现未注册有关。从Spring 4.x开始,默认情况下启用CSRF保护,除非您像下面这样将其关闭

http
    .csrf()
    .disable()

您将得到403个错误。

相关问题