- 安全性:误操作、人为破坏、数据泄露等
- 数据隔离:不同权限能看到及操作不同的数据
- 明确职责:运营、客服等不同角色,leader和dev等不同级别
- 用户-权限:人员少,功能固定,或者特别简单的系统
- RBAC(Role-Based Access Control):基于角色的权限访问控制,用户-角色-权限
- 能实现的角色级权限 RBAC
- 能实现功能级、数据级权限
- 简单、易操作、能够应对各种需求
- 权限管理界面、角色管理界面、用户管理界面
- 角色和权限关系维护界面、用户和角色关系维护界面
- Spring Security
- Apache Shiro
6.1 常用认证模式
- basic 是http1.0开始的、针对特定的资源需要提供用户名和密码才可以访问。用户名:密码 以base64编码,浏览器会在报文头部加入base64编码的内容,服务器解析出这些信息并且认证通过才可以访问。缺点:无状态,导致每次通信都需要要带上认证信息。传输不安全,认证信息用的是base64位编码,基本上属于明文传输,很容易对报文截取盗用认证信息
- Digest 用来替代原来的basic模式、与basic不同的是、浏览器会对用户名、密码、http方法、对请求资源的uri等组合后进行md5加密再把计算得到的结果发送给服务器,服务器获取到信息后同样会对用户名密码http方法等组合运算后再次以结果比较,如果相同就是认证通过。避免了明文传输
- X.509 证书认证
- LDAP 是轻量级的目录访问协议
- Form 基于表单的验证
6.2 常用权限拦截器讲解
- SecurityContextPersistenceFilter 位于过滤器的顶端、是第一个起作用的过滤器。第一个用途是保证用户的session已经存在了SpringSecurity上下文中,第二个用户是在所有过滤器执行完后清空 SecurityContextHolder的内容
- LogoutFilter 处理注销请求
- AbstractAuthenticationProcessingFilter 处理form登录的过滤器
- DefaultLoginPageGeneratingFilter 用来生成一个默认的登录页面
- BasicAuthenticationFilter 进行basic验证的
- SecurityContextHolderAwareRequestFilter 用来包装用户的请求
- RememberMeAuthenticationFilter 记住我功能 依赖Cookie实现
- AnonymousAuthencationFilter 当用户未登录时默认分配匿名权限
- ExceptionTranslationFilter 处理filterSecurityInterceptor中抛出的异常
- SessionManagementFilter 防止会话攻击
- FilterSecurityInterceptor 包含用户的权限控制
- FilterChainProxy 安装顺序来调用一组filter
总结:SpringSecurity:身份认证、权限拦截、权限缓存、权限的数据库管理、自定义决策