Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过oAuth2 Spring安全性获取身份验证(主体)对象?_Java_Spring_Spring Mvc_Spring Security_Oauth 2.0 - Fatal编程技术网

Java 通过oAuth2 Spring安全性获取身份验证(主体)对象?

Java 通过oAuth2 Spring安全性获取身份验证(主体)对象?,java,spring,spring-mvc,spring-security,oauth-2.0,Java,Spring,Spring Mvc,Spring Security,Oauth 2.0,因此,当用户通过oAuth2环境中的授权服务器在其客户机设备上获得授权JWT后,我开始考虑可以实现哪个自定义AuthenticationManager甚至自定义AuthenticationProvider时,我感到困惑 然后我突然想到,用户不需要通过AuthenticationManager,因为他们已经使用系统中实现的oAuth2流通过授权服务器进行了“身份验证”。他们有JWT访问令牌来证明这一点,事实上,如果没有授权的访问令牌,他们甚至无法访问任何资源服务器端点 但是,我仍然需要一种方法来访

因此,当用户通过oAuth2环境中的授权服务器在其客户机设备上获得授权JWT后,我开始考虑可以实现哪个自定义AuthenticationManager甚至自定义AuthenticationProvider时,我感到困惑

然后我突然想到,用户不需要通过AuthenticationManager,因为他们已经使用系统中实现的oAuth2流通过授权服务器进行了“身份验证”。他们有JWT访问令牌来证明这一点,事实上,如果没有授权的访问令牌,他们甚至无法访问任何资源服务器端点

但是,我仍然需要一种方法来访问包含所有用户信息的身份验证对象

在没有使用AuthenticationManager的情况下,如何创建和获取对此身份验证对象的引用?我在这里很困惑

我想要这个身份验证对象的主要原因是,我计划在Spring security的ACL旁边使用自定义表达式的方法级安全性。换句话说,我希望oAuth2和我还希望使用ACL对哪些用户对哪些域对象拥有授权/权限进行非常精细的控制

那么,在设置oAuth2之后,我如何访问这个身份验证对象(甚至可能使用用户当前的访问令牌作为字段/属性来创建它)


谢谢。

有以下几种控制器方法:

@RequestMapping(...)
Output do(Input input)
您可以将身份验证对象添加到参数:

@RequestMapping(...)
Output do(Input input, Authentication authentication)
Spring将自动连接此依赖项。 如果您在较深的层/其他类中,您可以使用

 SecurityContextHolder.getContext().getAuthentication()

所以让我理解。将oAuth2与Spring Security一起使用将自动构造身份验证对象,并在SecurityContextHolder.getContext().setAuthentication()中设置它?如果为true,则1)它使用什么AuthenticationManager实现来执行此操作?2) 如果它是AuthenticationProvider实例,它是哪个实现?3) UserDetailsService的幕后实现是检查请求标头中发送的令牌是否有效,然后还从数据源中提取属于令牌资源所有者的用户名和其他凭据?Sry,最近几天没有联机。是,Spring将根据身份验证令牌的内容自动创建此对象。通常,您必须提供自己的UserDetails服务实现。我在这里用简单的DB登录和oauth2做了一个例子:但是它没有很好的文档记录。基于此: