spring social中社交账号的解绑死循环

看了一些网上的教程(教程地址:https://juejin.im/post/5a7ae6... ), spring social提供了一个ConnectController实现了绑定与解绑

其中前端发送 /connect/{providerId}(DELETE请求) 就能解除相关绑定

然后说在调用该请求之后会返回 connect/{providerId}Connect 的这样一个视图, 但这个视图需要自己扩展实现

但我自己编写发现确实能删除数据库中的绑定, 但不会跳转到connect/{providerId}Connect, 而是不断的死循环, 最后前端返回ERR_TOO_MANY_REDIRECTS, 查看ConnectController的源码

    @RequestMapping(value="/{providerId}", method=RequestMethod.DELETE)
    public RedirectView removeConnections(@PathVariable String providerId, NativeWebRequest request) {
        ConnectionFactory<?> connectionFactory = connectionFactoryLocator.getConnectionFactory(providerId);
        preDisconnect(connectionFactory, request);
        connectionRepository.removeConnections(providerId);
        postDisconnect(connectionFactory, request);
        return connectionStatusRedirect(providerId, request);
    }

    protected RedirectView connectionStatusRedirect(String providerId, NativeWebRequest request) {
        HttpServletRequest servletRequest = request.getNativeRequest(HttpServletRequest.class);
        String path = "/connect/" + providerId + getPathExtension(servletRequest);
        if (prependServletPath(servletRequest)) {
            path = servletRequest.getServletPath() + path;
        }
        return new RedirectView(path, true);
    }

    private String getPathExtension(HttpServletRequest request) {
        String fileName = WebUtils.extractFullFilenameFromUrlPath(request.getRequestURI());        
        String extension = StringUtils.getFilenameExtension(fileName);
        return extension != null ? "." + extension : "";
    }

上面的源码并没有将/connect/{providerId}转换成connect/{providerId}Connect啊, 最后的return connectionStatusRedirect(providerId, request) 不还是会回到removeConnections中吗?

阅读 2.3k
1 个回答

自己测出来了, 不能发送ajax请求, 用了form提交的形式就可以了

<form action="/connect/github" method="POST">
    <input id="method" type="hidden" name="_method" value="delete"/>
    <button>解绑</button>
</form>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进