一 springsecurity实现权限认证的笔记
1.1 springsecurity的作用
springsecurity两大核心功能是认证和授权,通过usernamepasswordAuthenticationFilter进行认证;通过filtersecurityintercepter进行授权。springsecurity其实多个filter过滤链进行过滤。
用户认证指的是:验证某个用户是否为系统合法主题,也就是说用户能否访问系统,用户认证一般要求用提供用户名和密码,系统通过校验用户名和密码来验证认证过程。
用户授权指的是某个用户具有权限执行某个操作,在一个系统中,不同的用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而用的用户可以进行修改。一般来说系统会为不同的用户分配不同的角色,而每个角色对应一系列的权限。
1.2 token模式与session模式
1.如果基于session模式,那么spring-security会对cookie里的sessionid进行解析,找到服务器存储session信息,然后判断当前用户是否符合请求的要求。
2.如果是基于token,则需要解析token,然后对当前请求加入到spring-security管理的权限信息中去。
1.3 案例授权流程
如果系统的模块比较多,每个模块都需要进行认证和授权,所以我们选择基于token的形式进行认证与授权。
1.用户根据用户名和密码认证成功,然后获取用户角色的一系列信息,并以用户名为key,权限为列表的value的形式存储到redis缓存中。
2.根据用户名和相关信息生成token,返回给前端。
3.浏览器将token记录到cookie中,每次调用api接口都默认将token携带到header请求头中。
4.spring-security解析header头,获取token信息,解析token获取用户名,根据用户名从redis中获取权限信息列表。这样spring-security就能够判断当前请求是否有权限访问。
1.4 整合springsecurity的结构
二 疑问记录
2.1 springsecurity怎么取消默认的登录页面以及修改页面自定义样式
2.2 分布式认证授权问题
分布式认证授权:
1.没有登录情况下,访问资源 ,api网关能够进行权限拦截
2.登录情况下,怎么对token的解析验证
3.登录情况下,权限内容怎么获取
4.分布式认证授权怎么做sso?
2.3 权限系统中,用户A对用户B修改权限后
1)超级用户修改正在登录中的用户密码之后当前强制退出?
实现逻辑:
1.假设用户认证成功后,用户信息存储到redis中,且形式为:<userid,权限>
2.管理员修改用户密码后,通过userid将redis中的用户信息清空。
3.用户再操作功能时,相应请求走filter进行判断,用户的权限为空,则让其重新登录。
2) 超级用户修改正在登录中的用户的角色,权限之后强制退出?
实现逻辑:
1.假设用户认证成功后,用户信息存储到redis中,且形式为:<userid,权限>
2.管理员修改用户角色后,通过查询redis,把redis中包含修改角色的用户信息都清空
3.用户操作功能时,相应请求走filter进行判断,用户的权限为空,则让其重新登录。