SpringSecurity解决多表登录问题

我们公司由于加了很多需求,需要创建两个用户表,但是springsecurity默认是只支持一张表验证的,我也没有使用SpringSecurity搞过两张表实现登录验证的,于是在网上找资料。

说到多表登录,这个解决过程是真的尖酸,我在网上翻烂了,也没有找到一个又说到如何解决SpringSecurity如何解决多表登录的问题的,都是扯东扯西,真的挺浪费时间的。

一、 登录

这里我们现将两张表分别取个名字(1. 管理员表 2. 用户表)

1. 第一次登录

第一次登录我是用的 自定义的 loadUserByUsername 方法通过账号对管理员表进行登录验证,

自定义的 getUsername方法通过账号对用户表进行登录验证。

登录的话是没有任何问题的,但是我忘记了一个问题,他是可以登录,无法获取当前用户信息,

因为用户每次调用接口都需要进入JWT 登录授权过滤器进行过滤,我们无法判断是那张表进入的,

我使用的是用户表进行登录的,因为我们获取用户信息获取的是管理员表中的信息,

然后在获取用户信息的时候报类型转换错误,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnSeKcVd-1668136274115)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221110175108207.png)]

2. 第二次登录

第二次登录用的是redis进行缓存,

@Resource
private RedisTemplate redisTemplate;

用户表存入的格式是

redisTemplate.opsForValue().set(username+“user”,“user”);

管理员表存入的格式是

redisTemplate.opsForValue().set(username+“admin”,“admin”);

跟上面一样,因为用户每次调用接口都需要进入JWT 登录授权过滤器进行过滤,我们无法判断是那张表进入的,

我使用的是用户表进行登录的,因为我们获取用户信息获取的是管理员表中的信息,

然后在获取用户信息的时候报类型转换错误,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FUDgxujx-1668136274118)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221111093300543.png)]

这个方式的话如果两张表里面有两个一样的账号就会两个都进入,那么你这个如果是用户表登录,两张表都存在这个账号的话,你就无法判断它会进入到用户表还是管理员表去查找信息,那么你获取的个人信息就不准确,

在获取用户信息的时候报类型转换错误,(注意:这种方法需要防重,防止两张表账号有一样的)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YV7FzaFv-1668136274118)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221110173102871.png)]

3. 第三次登录

第三次登录这次我做了想了许多,竟然这些方法都不行,然后我想在使用jwt生成token令牌的地方下手,看下能不能找到突破口,然后我又看了jwt工具类,就开始行动了,想在只能在生成token的时候在username上加点东西,然后就在用户表上面 user.setUsername(username + “user”); 设置用户表账号+user判断是用户表进行的操作,在用户表上面 user.setUsername(username + “admin”); 设置管理员表账号+admin判断是管理员表进行的操作

3.1 用户表登录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TgAmFxny-1668136274119)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221111103901790.png)]
3.2 管理员表登录

又要[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUtdiwu7-1668136274120)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221111104238661.png)]

3.3 Jwt生成token规则

这里是使用用户名加登录时间进行token生成的[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7jyeAwv3-1668136274121)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221111104154209.png)]

3.4 jwt登录过滤器

我们使用过滤器通过用户表或者管理员表提取出来用户名(这里我们就可以判断是哪个表的用户进行的接口调用)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3RJtG2Ho-1668136274122)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221111105804671.png)]

3.5 Jwt验证token是否有效

然后在Jwt工具类验证token是否有效方法进行校验修改,把账号提取出来(通过用户表或者管理员表进行账号提取,然后通过刚才jwt生成token的规则,我们用来校验,通过账号,过期时间判断token是否过期,过期就需要重新登录,或者续期)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xh7NsjQc-1668136274123)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221111110301165.png)]

至此我们使用SpringSecurity实现多表登录就成功了。

猜你喜欢

转载自blog.csdn.net/ITKidKid/article/details/127802738