前段时间接触Spring Security,做微信授权登录。
刚接触Spring Security感觉比较晦涩,看了一些文章说的不是很清楚,有些文章解决的深入一些又不太好理解,网上很多都是转载的同一片文章,学习起来比较痛苦。我希望能帮助到其他初学者,因此有了这篇文章,也养成记录的好习惯。
我是用的开源项目ruoyi,他已经实现了密码认证。
我一开始的设计思路是,直接使用login方法,不再写一份单独的登录。用微信openid匹配系统内的关联账号,解密密码为明文密码放入login方法 password中,然后授权token,看起来是不是一切都很完美~
结果解密密码过程异常复杂,需要在源码里找具体相关片段,挣扎了一段时间后放弃。
第二个思路,既然密码解密行不通,那么我直接跳过 authenticate 认证步骤直接生成token可以吗?答案自然是可以的,只不过这一块内容没有用上认证体系,既然接触到了这一块,必须要把这一块理解的七七八八。
第三个思路,其实到这里也没什么思路了,开始在网上找前辈们的经验。发现大量的转载都来自一两篇文章,按照方法去做,结果并不好。
需要做的改动
注册Provider,ruoyi实现的方式不一样。
重写 authenticate
重写 loadUserByUsername
新增 weChatServiceImpl
大概的流程是
-> 注册Provider
-> 微信授权ServiceImpl
-> 根据注册的 Provider 找到对应的认证方法 authenticate
-> 指定UserDetailsService的实现类,实现loadUserByUsername方法
-> 认证成功后返回Authentication,生成token完成认证
看了几篇有用的文章,大概懂了是如何运作的。
https://www.cnblogs.com/wzkris/p/16984369.html
如有错误,请指正。