java开发企业级权限系统学习

一.权限系统概述

  1.为什么需要权限系统?

  • 安全性:误操作、人为破坏、数据泄露等。
  • 数据隔离:不同的权限能看到及操作不同的数据。
  • 明确职责:运营、客服等不同角色,leader和dev等不同级别

  2.权限管理核心

  • 用户——权限:人员少,功能固定,或者特别简单的系统
  • RBAC(Role-Based Accecc Control):用户-角色-权限-控制,基于角色的访问控制

  3.理想中的权限管理

  • 能实现角色级别权限:RBAC
  • 能实现功能级、数据级权限
  • 简单、易操作,能够应对各种需求

  4.相关操作界面

  • 权限管理界面、角色管理界面、用户管理界面
  • 角色和权限关系维护界面、用户和角色管理维护界面

二.Spring Security权限框架学习

  1.Spring Security介绍

   

  • 几种认证方式
    • Basic:认证方式(质询 / 响应的方式(challenge/response))通过客户端输入账号密码,账号密码以Basic64加密方式放在请求头中发送到web服务器访问相应资源。
      • 缺点:①无状态导致每次通信都要带上认证信息,即使是已经认证过的资源;
      • 缺点:②传输安全性不足,认证信息用Base64编码,基本就是明文传输,很容易对报文截取并盗用认证信息。
    • Digest:认证方式:质询 / 响应的方式(challenge/response)。
      • 过程:用户输入用户名和密码,浏览器对用户名、密码、nonce值、HTTP请求方法、被请求资源URI等组合后进行MD5运算,把计算得到的摘要信息添加到请求头发送给服务端。
      • 相比Basic:使用了随机字符串,避免了密码在网络上明文传输,
      • 缺点:认证报文被攻击者拦截到攻击者可以获取到资源。DIGEST 认证提供了高于 BASIC 认证的安全等级,但是和 HTTPS 的客户端认证相比仍旧很弱。
    • X.509
    • LDAP 

  2.SpringSecurity 过滤器链

    SpringSecurity 采用的是责任链的设计模式,它有一条很长的过滤器链。现在对这条过滤器链的各个进行说明:

  1. WebAsyncManagerIntegrationFilter:将 Security 上下文与 Spring Web 中用于处理异步请求映射的 WebAsyncManager 进行集成。
  2. SecurityContextPersistenceFilter:在每次请求处理之前将该请求相关的安全上下文信息加载到 SecurityContextHolder 中,然后在该次请求处理完成之后,将 SecurityContextHolder 中关于这次请求的信息存储到一个“仓储”中,然后将 SecurityContextHolder 中的信息清除,例如在Session中维护一个用户的安全信息就是这个过滤器处理的。
  3. HeaderWriterFilter:用于将头信息加入响应中。
  4. CsrfFilter:用于处理跨站请求伪造。
  5. LogoutFilter:用于处理退出登录。
  6. UsernamePasswordAuthenticationFilter:用于处理基于表单的登录请求,从表单中获取用户名和密码。默认情况下处理来自 /login 的请求。从表单中获取用户名和密码时,默认使用的表单 name 值为 username 和 password,这两个值可以通过设置这个过滤器的usernameParameter 和 passwordParameter 两个参数的值进行修改。
  7. DefaultLoginPageGeneratingFilter:如果没有配置登录页面,那系统初始化时就会配置这个过滤器,并且用于在需要进行登录时生成一个登录表单页面。
  8. BasicAuthenticationFilter:检测和处理 http basic 认证。
  9. RequestCacheAwareFilter:用来处理请求的缓存。
  10. SecurityContextHolderAwareRequestFilter:主要是包装请求对象request。
  11. AnonymousAuthenticationFilter:检测 SecurityContextHolder 中是否存在 Authentication 对象,如果不存在为其提供一个匿名 Authentication。
  12. SessionManagementFilter:管理 session 的过滤器
  13. ExceptionTranslationFilter:处理 AccessDeniedException 和 AuthenticationException 异常。
  14. FilterSecurityInterceptor:可以看做过滤器链的出口。
  15. RememberMeAuthenticationFilter:当用户没有登录而直接访问资源时, 从 cookie 里找出用户的信息, 如果 Spring Security 能够识别出用户提供的remember me cookie, 用户将不必填写用户名和密码, 而是直接登录进入系统,该过滤器默认不开启。

  3.SpringSecurity 流程图

SpringSecurity流程图

  流程说明

  1. 客户端发起一个请求,进入 Security 过滤器链。
  2. 当到 LogoutFilter 的时候判断是否是登出路径,如果是登出路径则到 logoutHandler ,如果登出成功则到 logoutSuccessHandler 登出成功处理,如果登出失败则由 ExceptionTranslationFilter ;如果不是登出路径则直接进入下一个过滤器。
  3. 当到 UsernamePasswordAuthenticationFilter 的时候判断是否为登录路径,如果是,则进入该过滤器进行登录操作,如果登录失败则到 AuthenticationFailureHandler 登录失败处理器处理,如果登录成功则到 AuthenticationSuccessHandler 登录成功处理器处理,如果不是登录请求则不进入该过滤器。
  4. 当到 FilterSecurityInterceptor 的时候会拿到 uri ,根据 uri 去找对应的鉴权管理器,鉴权管理器做鉴权工作,鉴权成功则到 Controller 层否则到 AccessDeniedHandler 鉴权失败处理器处理。

  spring security优缺点

  优点:

  1. 提供了一套安全框架,而且这个框架是可用的
  2. 提供了很多用户认证的功能,实现相关接口即可,节约大量开发工作
  3. 基于spring,易于集成到spring项目中,且封装了很多方法。

猜你喜欢

转载自www.cnblogs.com/lmt-g/p/12141805.html