我正在使用 JHipster 生成的 Spring Social 和 Spring Security 构建单页应用程序。
在某个社交身份验证提供商对用户进行身份验证后,我试图捕获原始查询参数。
例子:
调用 /signin/someprovider?show= someEntityId并在成功的身份验证将用户重定向到 /signup/ 后,我需要一种获取“ someEntityID ”的方法。
我假设不同的http调用使得传递/存储参数变得困难。是否有一些我可以使用/重用的 Spring 内置功能,或者如何解决这个问题?
更新
请求的线程如下所示:
(1) 浏览器->http://localhost:9060/signin/authenticationProvider?show=**someEntityId**
<- 重定向到https://authenticationProvider... &state=SomeState
(2) 浏览器->https://authenticationProvider
<- 重定向到http://localhost:9060/signin/google?state=SomeState&code=SomeCode
(3) 浏览器->http://localhost:9060/signin/authenticationProvider?state=SomeState&code=SomeCode
<- 重定向到http://localhost:9060/social/signup
(4) 浏览器->http://localhost:9060/social/signup
这最终在
@GetMapping("/signup")
public RedirectView signUp(WebRequest webRequest, @CookieValue(name = "NG_TRANSLATE_LANG_KEY", required = false, defaultValue = Constants.DEFAULT_LANGUAGE) String langKey) {
try {
Connection<?> connection = providerSignInUtils.getConnectionFromSession(webRequest);
socialService.createSocialUser(connection, langKey.replace("\"", ""));
此时它想使用原始参数someEntityId调用一个函数。
根据带有几个参数的 google oauth2 redirect_uri , ?show= someEntityId参数应该在 Oauth2 请求的 state 参数中进行编码,以便从 (1) 到 (3) 存活。在 (3) 中,必须将状态参数添加到重定向 uri,以便可以在 (4) 中解码原始参数。
看起来工作量很大,还是我错过了什么?如果有一种方法可以有一个会话变量,我可以将参数存储在 (1) 中并在 (4) 中再次获取它们,那就太好了。