使用Spring Social,Spring安全性登录后重定向到原始URL?

时间:2013-08-29 14:57:52

标签: java spring jsp spring-security spring-social

春天的社会和安全专家,

我有以下用例:

  1. 用户请求http://www.foobar.com/foo/1001
  2. 等特定网址
  3. 匿名用户可以看到此页面,但无法在此页面中发表评论。评论发布部分由Spring安全保护。
  4. 用户点击登录。它会弹出一个登录窗口或将其重定向到登录页面。
  5. 用户选择使用Facebook ID登录。
  6. 用户使用FB登录后,会通过授权将用户重定向到http://www.foobar.com/foo/1001
  7. 我想知道如何使用Spring Social做到这一点。非常感谢!!

2 个答案:

答案 0 :(得分:0)

你真的试过它看它是否有效吗? Spring安全性会自动执行此操作。

如果您是匿名用户并尝试访问需要特定权限的资源,则spring安全性会存储尝试的URL并将您重定向到登录页面。成功登录后,它会重新获取尝试的URL并将其重定向到那里。

答案 1 :(得分:0)

我只是设法通过复制/粘贴代码执行此操作,弹簧安全性用于执行此任务。

CAVEAT:我正在使用ProviderSignInController来配置帐户并登录。

ProviderSignInController允许使用SignInAdapter根据SocialConnection手动登录本地用户帐户

在signIn方法中:

public String signIn(String userId, Connection<?> connection, NativeWebRequest request)

我有以下代码:

HttpServletRequest req = (HttpServletRequest)request.getNativeRequest();
HttpServletResponse resp = (HttpServletResponse)request.getNativeResponse();

RequestCache rc = new HttpSessionRequestCache();
SavedRequest savedRequest = rc.getRequest(req, resp);
String targetUrl = savedRequest.getRedirectUrl();
if(targetUrl != null){
     log.info("Redirecting to DefaultSavedRequest Url: " + targetUrl);
     new DefaultRedirectStrategy().sendRedirect(req, resp, targetUrl);
     hasSentRedirect = true;
}

我不得不深入研究SavedRequestAwareAuthenticationSuccessHandler的代码,看看它如何作为春季安全的一部分。

我很失望ProviderSignInController根本没有真正链接到Spring Security。所以我们必须破解我们的方式才能获得相同的功能。 我还发现登录事件也没有发布。

我最近问过这个问题:Should I use both SocialAuthenticationFilter and ProviderSignInController together