zoukankan      html  css  js  c++  java
  • 登录权限之过滤器

    1、首次加载页面时,先调用(基类控制器)BaseContoller : Controller; 注意:循环查找Home控制器中index的方法
    2、访问/admin/login时 无需AdminAuthFilter(登录状态过滤器)和PermissionActionFilterAttribute(权限验证过滤器)
    a.先加载LoginController构造方法中ISysUserService,IAdminAuthService接口实例化,再访问控制器基类BaseContoller ,再访问LoginController方法。
    b.访问Route("login")的action方法LoginIndex
    3、点击登录:先加载LoginController构造方法,再调用getSalt(密码盐),然后调用LoginIndex(登录方法)
    a.通过获取密码盐(数据库中)与输入框密码组合MD5加密后,与数据库中(MD5加密的登录密码)对比校验。
    b.登录密码校验成功后,将登录token,用户名称保存到“登录方案CookieAdminAuthInfo.AuthenticationScheme”【注意:每次登录成功后,token不断变化】
    4、登录成功后,进入首页,先走“IResourceFilter”过滤器中OnResourceExecuting(执行前action)
    a.先在“IResourceFilter”过滤器中OnResourceExecuting中调用引擎IAdminAuthService中“当前用户”并校验状态。
    b.校验通过后,进入控制器MainController(先访问其基类BaseContoller和PublicAdminController【[AdminAuthFilter] //登录状态过滤器,注意:构造方法中注入IWorkContext】)
    c.然后进入Index方法。接着加载视图界面(获取当前用户,当前用户所属角色,当前用户角色的所有菜单列表)
    d.之后,调用IResourceFilter过滤器OnResourceExecuted中方法
    5、用户列表:
    a.先调用IResourceFilter过滤器中OnResourceExecuting方法,再访问UserController构造函数
    b.再调用用户列表action之前先IActionFilter的OnActionExecuting(验证允许匿名访问和权限验证),权限验证-》当前controller和action是否已授权该用户
    c.跳转到用户列表action(UserIndex)
    d.加载完成用户列表action(UserIndex),再调用IActionFilter的OnActionExecuted(执行后方法)
    e.加载视图界面后(校验各个按钮等权限),再访问IResourceFilter过滤器的OnResourceExecuted事件
    6、点击退出:
    a.先调用IResourceFilter过滤器中OnResourceExecuting方法,再访问MainController构造函数
    b.调用退出action(SignOut退出)
    c.再访问IResourceFilter过滤器的OnResourceExecuted事件
    d.再加载LoginController构造函数【无需AdminAuthFilter(登录状态过滤器)和PermissionActionFilterAttribute(权限验证过滤器)】

    注意:
    (1)AdminAreaController:无需AdminAuthFilter(资源过滤器)和PermissionActionFilterAttribute(action过滤器)
    (2)PublicAdminController: 只验证AdminAuthFilter(资源过滤器) 目前只支持“首页”和“退出”
    (3)AdminPermissionController:包含AdminAuthFilter(资源过滤器)和PermissionActionFilterAttribute(action过滤器)

    总结:
    (一)IActionFilter资源过滤器:只在执行action前后执行。
    (二)IResourceFilter资源过滤器 :加载控制器之前,视图界面加载完成之后。

  • 相关阅读:
    JWT与Session的比较
    Java面试-TCP连接及其优化
    Java面试-动态规划与组合数
    探索Redis设计与实现12:浅析Redis主从复制
    探索Redis设计与实现11:使用快照和AOF将Redis数据持久化到硬盘中
    探索Redis设计与实现10:Redis的事件驱动模型与命令执行过程
    探索Redis设计与实现9:数据库redisDb与键过期删除策略
    探索Redis设计与实现8:连接底层与表面的数据结构robj
    探索Redis设计与实现6:Redis内部数据结构详解——skiplist
    探索Redis设计与实现7:Redis内部数据结构详解——intset
  • 原文地址:https://www.cnblogs.com/lvjy-net/p/10414452.html
Copyright © 2011-2022 走看看