作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬
学习必须往深处挖,挖的越深,基础越扎实!
重构注册逻辑
在浏览器中的第三方登录回顾:
- social 在拿到用户信息之后
- 查询数据库没有绑定的用户会跳转到默认的/signUp路径
- 提供了一个我们自己的注册页面,拿到用户提交的注册信息,调用social数据库服务,把关联信息写入数据库中。完成注册
- 再次登录,数据库中有用户信息,则登录成功
问题:
- 上面这个流程问题所在就是 第三方的信息存放在了 session 中;
- 还有一个问题,就是第2步会302.需要客户端信息判定并跳转到登录页
所以现在开始改造,改造方案:
- 流程完成后,更改跳转的页面到app指定页面,
- 根据设备id,我们把信息存放在redis中
- 用户注册完成后,提交,再把第三方信息拿出来,合并完成注册
改造
注意: 在改造测试之前把默认注册用户的功能关闭掉
也就是 com.example.demo.security.DemoConnectionSignUp 类
之前的注册地址是在
cn.mrcode.imooc.springsecurity.securitycore.social.SpringSocialConfig#imoocSocialSecurityConfig
@Bean
public SpringSocialConfigurer imoocSocialSecurityConfig() {
// 默认配置类,进行组件的组装
// 包括了过滤器SocialAuthenticationFilter 添加到security过滤链中
MySpringSocialConfigurer springSocialConfigurer = new MySpringSocialConfigurer();
springSocialConfigurer.signupUrl(securityProperties.getBrowser().getSignUpUrl());
springSocialConfigurer.setSocialAuthenticationFilterPostProcessor(socialAuthenticationFilterPostProcessor);
return springSocialConfigurer;
}
中设置的,那么先把这个地址更改掉,由于这里在浏览器环境下工作得很好,不要直接修改这里。使用一个技巧替换掉
package cn.mrcode.imooc.springsecurity.securityapp;
import cn.mrcode.imooc.springsecurity.securitycore.social.SpringSocialConfig;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.social.security.SpringSocialConfigurer;
import org.springframework.stereotype.Component;
/**
* @author : zhuqiang
* @version : V1.0
* @date : 2023/8/8 23:49
*/
@Component
public class SpringSocialConfigurerPostProcessor implements BeanPostProcessor {
// 任何bean初始化回调之前
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
//任何bean初始化回调之后
// 在这里把之前浏览器中配置的注册地址更改为app中的处理控制器
@Override
public Objec