Spring Security流程详解

安全框架

  • 认证 Authentication
    • 俗称登录
      • 401 认证失败
  • 授权 Authorization
    • 根据角色和权限,决定能够执行哪些操作
      • 403 权限不足

认证的执行流程

  1. 由spring监听器根据spring-security.xml 创建spring-security的对象,并把它们交给spring容器管理

  2. 当一个请求过来,首先经过 DelegatingFilterProxy (代理过滤器),由它将请求交给spring-security 内部的过滤器进行处理(11 个)

  3. UsernamePasswordAuthenticationFilter (基于用户名密码的认证过滤器)

    1. 收集表单数据,将表单数据封装至令牌对象 UsernamePasswordAuthenticationToken

    2. 令牌对象(类型Authentication)中由四个属性

      principal      对应着用户名
      credentials    对应着密码
      authorities    -- 角色(多个,集合)
      authenticated  false 是否已认证
      
    3. 将令牌信息交给了 authentication-manager(认证管理器对象)

    4. 认证管理器调用认证提供者(authentication-provider)

    5. 再由认证提供者调用 UserDetailService (接口)loadUserByUsername 方法返回一个用户详情对象(UserDetail)

    6. 将用户详情对象返回给 认证管理器, 认证管理器调用一个密码编码器完成密码对比(令牌中的密码和用户详情对象的密码做对比)

    7. 认证通过,更新令牌(类型Authentication)信息

      principal     存储用户详情
      credentials   -- 没用了
      authorities   角色信息(刚从用户详情中获得的)
      authenticated  true(已认证)
      
    8. 将认证通过的令牌对象存入 securityContext(安全上下文)

[外链图片转存失败(img-IpdyTl1h-1568542117053)(spring security.png)]

springmvc 的工作流程

  1. 请求发送到服务器后,被封装为 request 对象,到达 dispatcherServlet(springmvc 的入口)
  2. HanlderMapping(处理器映射器)
    • 根据请求地址,找到由哪个控制器的哪个方法来处理此请求
    • 其中的一个实现:RequestMappingHandlerMapping 根据 @RequestMapping 注解的路径来进行匹配
    • <mvc:resources <mvc:default-servlet-handler 也会对应一个处理器映射器 SimpleUrlHandlerMapping
  3. HandlerExecutionChain(处理器执行链)
    • 调用控制器对应的哪些拦截器(多个)
    • 调用处理器适配器(HandlerAdapter)
  4. HandlerAdapter(处理器适配器)
    • 调用控制器(controller)
    • 统一返回了 ModelAndView 对象
  5. 再由视图解析器(ViewResolver)
    • 在转发前,会把 model 中的数据存入 request 作用域
    • 将视图名转换为最终的 jsp 路径,并转发到 jsp
  6. 如果执行过程中出现了异常:
    • ExceptionHandlerExceptionResolver(异常解析器)
  7. jsp 动态生成 html 代码,返回响应

[外链图片转存失败(img-N00juDj0-1568542117056)(springmvc.png)]

md5

生成一个签名

  • 只要文件内容一样,那么签名结果也一样
  • 无论原始的内容有多大,最后的签名结果都是固定长度(16个字节)
  • 不可逆,不能根据签名结果回推原始内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值