spring security为什么这么复杂?
小时候写代码,对于权限这一块,写过一个库,基本就是一个泛型接口,里面有几个方法: 如验证输入的principal和credentials,返回token和authorities和roles,这个role其实就是一堆authorities的集合,也就说就是返回一堆authorities。然后每次请求会拿token找到authorities,然后再判断当前请求的资源(其实就是url)包不包括在authorities内。 这个接口的实现不是很复杂,当然也可以很复杂自己实现,因为是接口。里面的方法参数都带了很多上下文,所以基本可以获取到所有有用的信息。当年我用这个接口几乎就没有解决不了的权限问题。 后来我们用spring。用spring就更简单了,其实就是aop一下controller然后还是用类似的那种接口鉴权,不aop的话用filter或者拦截器其实一样的。 再后来,我发现spring security这个东西,然后粗略的研究了一下。好家伙,什么AuthenticationManager,AuthenticationProvider,UserDetailsService,SecurityContextHolder,SecurityInterceptor。。。眼花缭乱,无从下手。而且,不知道是我没注意还是眼瞎,这玩意儿似乎和web或者webflux强耦合。当时有个需求是session(其实就是token)放在redis里,有个同事为了实现这个简单的东西似乎要重写整个HttpSession类?还有也是因为我们的权限配置是在另一个服务里,所以获取权限的时候要重写UserDetailsService??不知道是我同事水平不够还是版本太老了,反正看的我是瑟瑟发抖。。。 我就想问一下,有没有必要系统的学习一下这个东西吗?其实我看了半天整个spring security实现的东西似乎和我自己的那种接口思想没什么区别。现在有新项目了,到底要不要系统学习spring security,是我太浅了吗?