背景: 上篇文章在源码读取的基础上,根据自身代码习惯及需求,总结了一个自定义简单落地版本。后来在看到松哥写的博文(不太爱看官网),发现还有新的变种模式,虽然整体架构没有改变,但完全突破以往在拦截器和过滤器做安全验证的固有印象,故单独列出。
Spring-Security全局导读:
1、Security核心类设计
2、HttpSecurity结构和执行流程解读
3、Spring-Security个人落地篇
上一篇文章中,我们在拦截器中实现登陆参数解析和认证,这里我们还做了一个额外的操作,就是参数校验。虽然读取和校验参数我们可通过其他很多方式都能实现,但在SpringBoot高度集成自动化的环境下,多少显得有点多余,尤其是代码中存在着大量if…else语句。下图为落地篇拦截器版本:
参数序列化和校验的过程,在普通接口的处理过程中,都是由框架自动执行,我们只需要根据场景设置正确的注解就可以了,@RequestBody + @Valid那一套加上全局异常处理是目前很多springboot项目使用套式,登录既然也是传参和校验,是否可以同样用接口的形式完成呢?
在spring-security框架下,当然可以,而且实现也很美观,如下简述流程:
一、security安全过滤器链侧放开登录URL
二、编写对应的控制器及对应鉴权代码
从上图可以看到在过滤器中完成鉴权操作,且将参数反序列化及校验的过程交给了框架,但是要注意将授权信息保存在上下文中,这样后续请求在经过原有的安全框架时才会被放行。
三、必要的全局异常控制
此处仅简单包装登录信息错误,其他参数错误等场景可自行处理,原有框架中也会提供对应的授权失败处理器。
这样在利用security框架的权限管理和spring的请求封装&校验一体化逻辑,我们自己可需要编写的代码就极少了。虽然整体改变不大,但打破我固有的思维,特在此记录。如果想了解更多的全局封装,可参考往期博文。