SpringSecurity+Jwt单点登录(代码尚未补充)

当使用了Security框架后, 默认情况下所有的请求都要求必须登录, 
所以我自定义了一个security配置类
把部分不需要登录就可以访问的路径和这些路径中的异步访问 配置放行操作
在认证成功后的请求的消息头中还包含了自定义的非常规属性
此请求就会变成一个复杂请求, 所以我还配置了允许复杂请求的跨域访问

然后再配置类中显示配置了一个AuthenticationManager对象, 用来实现自定义登录的业务
在自定义的类中实现了UserDetailsService接口, 并重写了loadByUsername方法, 
在这个过程我发现我无法将查询到用户信息中id封装到此方法的返回对象中,
为了解决这个问题, 我又自定义了一个封装用户信息的类, 并继承User类, 将id属性添加到这个类中
这样就可以在我的登录业务中使用AuthenticationManager对象的authticated方法进行登录的认证
并且在认证通过的后返回值中也可以获取到用户的id了

至此, 在客户端登录认证成功后, 就可以生成并返回包含了用户信息的jwt给客户端了

接下来需要处理用户访问其它业务时的操作
我自定义了一个处理jwt的过滤器,  这个过滤器会先尝试获取请求中的jwt数据,
如果本次请求没有携带jwt则直接放行, 交由后面的过滤器进行处理
如果存在有效的数据, 就尝试解析
然后将解析得到的结果存入到Spring Security的上下文中, 
用于Spring Security框架中的其他组件, 能从上下文中获取到用户信息
从而完成了当客户端认证成功后访问其它页面时需要的权限验证

在以上操作执行之前, 需要清空security的上下文信息, 
如果不清除, 只要此前存入过信息, 即使后续不携带jwt, 
security上下文中的登录信息依然存在, 那程序的执行效果就偏离预期了

虽然Security框架 实现的认证和授权在编写的时候比较麻烦, 
但是后续,只需要在接收业务的Controller类中的各个方法上添加@PreAthorize,
然后添方法要求的权限就可以完成对访问权限的控制

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值