spring-security进行身份验证并创建主体,但是控制器获取了其他无效的用户实例

时间:2019-01-24 17:28:13

标签: java spring-boot spring-security

我刚刚从spring-security 5.0.x升级到5.1.3,并在部署容器内时发现我的服务没有从spring-security获取经过身份验证的用户主体。

相反,好像spring-webmvc实例化了我的用户主体的另一个实例,但是没有spring-security提供的所有用户和LDAP详细信息。

我从Spring https://github.com/spring-projects/spring-security/issues/3771找到了一条消息,该消息似乎很相关,但是它说我需要从旧的AuthenticationPrincipalArgumentResolver迁移到新的消息,但是我没有在任何地方明确使用它。

import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.security.core.annotation.AuthenticationPrincipal;

@Controller
public class MyService {

    @RequestMapping(value = "endpoint1",
        method = RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public String myEndpoint(
        @AuthenticationPrincipal(errorOnInvalidType = true) CustomUser user) {

我什至把errorOnInvalidType放在那里,但无济于事。

我还尝试根据文档https://docs.spring.io/spring-security/site/docs/5.1.3.RELEASE/api/

创建自定义AuthenticationPrincipal注释

看起来AuthenticationPrincipalArgumentResolver并没有完成工作,但是从调试中我看不到升级版本和旧的不赞成使用的版本(都在spring-security-web中)

相反,在创建不需要的空主体时,我在堆栈中看到很多spring-webmvc类,诸如HandlerMethodArgumentResolverComposite之类的东西,所以在我看来,我不小心删除了其中的关键部分config-批注或jar或实现。

谁能指出我的错误?

1 个答案:

答案 0 :(得分:0)

好吧,我发现了如何通过手动创建AuthenticationPrincipal bean来强制Spring解决AuthenticationPrincipalArgumentResolver的问题。

贷记AuthenticationPrincipal is empty when using EnableWebSecurity