/social/signUp 302返回,再发起请求应该是新的请求了,怎么能拿到之前session中的信息呢?

来源:6-7 重构注册逻辑

代码有毒

2018-08-09

@RestController
public class AppSecurityController {
    private Logger logger = LoggerFactory.getLogger(getClass());
    @Autowired
    private ProviderSignInUtils providerSignInUtils;

    @GetMapping(value = "/social/signUp")
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    public Connection signUp(HttpServletRequest request) {
        Connection<?> connectionFromSession = providerSignInUtils.getConnectionFromSession(new ServletWebRequest(request));
        logger.info(ReflectionToStringBuilder.toString(connectionFromSession, ToStringStyle.JSON_STYLE));
        return connectionFromSession;
    }
}

```

我使用postman,跟踪源码的确是走了Redirect;但是postman里面没有302状态,
直接走到上面的控制器里面去了。。搞不明白啊;

一直有一个疑惑,不是说app没有session吗?302的话相当于ajax响应。再次发起请求不是同一个session了,怎么拿到信息的呢?
```java
// connection unknown, register new user?
    if (signupUrl != null) {
      // store ConnectionData in session and redirect to register page
      sessionStrategy.setAttribute(new ServletWebRequest(request), ProviderSignInAttempt.SESSION_ATTRIBUTE, new ProviderSignInAttempt(token.getConnection()));
      throw new SocialAuthenticationRedirectException(buildSignupUrl(request));
    }
```

如上代码中,/social/signUp 302返回,再发起请求应该是新的请求了,怎么能拿到之前session中的信息呢? 这一点我没有明白。忘老师解说下。

写回答

1回答

代码有毒

提问者

2018-08-09

> 回答:

> postman中settings中有一个选项 Automatically follow redirects;关闭掉也就是变成OFF,就不会自动跳转了


> 关于 /social/signUp 能获取到session信息,也就是302能获取到session:

> 是因为postman中有服务器带回来的cookie,禁止掉cookie,就会发现获取不到了


0
0

Spring Security技术栈开发企业级认证与授权

Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全

2662 学习 · 1561 问题

查看课程