Spring security 自定义spring安全认证提供程序能否设置OAuth2安全上下文?

Spring security 自定义spring安全认证提供程序能否设置OAuth2安全上下文?,spring-security,oauth-2.0,Spring Security,Oauth 2.0,我正在尝试设置一个Spring3WebApp作为另一个应用程序的代理,该应用程序使用oauth2提供受保护的资源 我们使用的是用户名密码授权类型。 我的应用程序不应该知道用户数据库;实际上,它会查询其他应用程序,以获取有关用户的详细信息,包括他们拥有哪些权限以及其他内容 我的应用程序负责显示登录页面 我想使用一个定制的spring security AuthenticationProvider,它将: 连接到oauth服务器以获取访问令牌 然后使用OAuth2RestTemplate查询尝试登录

我正在尝试设置一个Spring3WebApp作为另一个应用程序的代理,该应用程序使用oauth2提供受保护的资源

我们使用的是用户名密码授权类型。 我的应用程序不应该知道用户数据库;实际上,它会查询其他应用程序,以获取有关用户的详细信息,包括他们拥有哪些权限以及其他内容

我的应用程序负责显示登录页面

我想使用一个定制的spring security AuthenticationProvider,它将:

连接到oauth服务器以获取访问令牌 然后使用OAuth2RestTemplate查询尝试登录的用户,以获取其授权权限和其他详细信息 基于此构建UserDetails。我的AuthenticationProvider将扩展AbstractUserDetailsAuthenticationProvider 问题是:

由于我正在使用配置我的spring应用程序,spring将OAuth2ClientSecurityContextFilter添加到过滤器链中 调用我的AuthenticationProvider类的“retrieveUser”方法时,此筛选器尚未通过 因此,如果我尝试在重写的“retrieveUser”方法中使用OAuth2RestTemplate,我会得到一个异常:

java.lang.IllegalStateException:未建立OAuth 2安全上下文。无法访问资源“avop服务”。 位于org.springframework.security.oauth2.consumer.OAuth2ClientHttpRequestFactory.createRequestOAuth2ClientHttpRequestFactory.java:38 位于org.springframework.http.client.support.HttpAccessor.createRequestHttpAccessor.java:76 位于org.springframework.web.client.RestTemplate.doExecuteRestTemplate.java:434 位于org.springframework.web.client.restemplate.executestertemplate.java:401 .. 等等

由于以下主题,我将其链接到OAuth2ClientSecurityContextFilter:

所以我的问题是:

在其他一些过滤器播放后启动AuthenticationProvider有意义吗? 如果是这样,是否可以控制过滤器的顺序? 或者有没有办法将UserDetails的计算延迟到过滤器链的后面? 我知道这可能是一个非常具体的案例,但我想知道我是用正确的方式攻击它,还是遗漏了什么


提前感谢。

解决方案是使用在正确位置添加过滤器

你能给我们详细介绍一下你的解决方案吗?也许可以粘贴到配置文件的某些部分?我有一个类似的应用程序,我可以使用OAuth2和AbstractAuthenticationProcessingFilter来实现一个伪SSO解决方案。以下是线索: