• Shiro笔记(一)Shiro整体介绍


    介绍:是一个java的安全(权限)框架

    可以完成的功能:认证登录(Authentication)、授权(Authorization)、加密(cryptography)、会话管理(session management)、集成web(web support)、缓存(caching)、记住密码(remember me)。

    类似功能的框架:Spring security 。

    shiro的执行流程(从外部来看):应用程序->subject->Shiro SecurityManager->Realm.

    shiro外部架构流程

    subject shiro对外API核心就是Subject 。Subject代表当前用,这个登录对象不一定是人,可以是网络爬虫,机器人等。与Subject所有交互都会委托给SecurityManager,Subject是门面,SecurityManager才是真正的执行者。

    SecurityManager 安全管理器:
    所有与安全有关的操作都会放在SecurityManager中交互;
    管理所有的Subject;
    它是Shiro的核心,负责与shiro的其他组件进行交互,相当于SpringMVC中的DispatcherServlet。

    Realm Shiro从Realm中获取安全数据(角色、用户、权限),它要验证用户身份,需要从Realm中获取相应的用户进行比较确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作,可以把Realm看成一个DataSource。
    在Realm中,数据先从缓存中获取,如果在缓存中取不到再到数据库中获取,然后将数据放入缓存中。

    一. Subject对象:Subject subject = SecurityUtils.getSubject();
    通过获取subjecet对象后,Subject可以做很多事:

    1. subject.getSession();获取session对象,在获取到session后,就可以往session中存放session值了。
    2. subject.isAuthenticated();判断当前对象是否被认证,即是否登录。
    3. subject.login(token)
    4. subject.hasRole('role');对当前用户判断是否有一些角色信息.
    5. subject.isPermitted('user:delete:zhangsan') ; 判断当前主体是否有权限.判断用户是否有某种行为.当前代表user能够对zhangsan进行delete操作.
    6. subject.logout() ; 执行登出操作.

    在subject调用login()方法的时候 , 会出现一些异常,这时候需要我们进行手动捕获这些异常,这些异常可能有 用户名不存在 UnknownAccountException 密码不正确IncorrectCredentialsException 账户被锁定LockedAccountException以及其他的认证异常(AuthenticationException).

    二. token对象(): Shiro给我们提供了一个UsernamePasswordToken对象,其中封装了有username password rememberMe host 属性,其中我们可以对token对象进行继承并自定义,如添加是否是手机登录,添加email,别名等.subject判断当前登录主体是否被认证,如果发现没有登录,则需要将当前subject对象的信息放入到token中,subject对token进行登录验证.

  • 相关阅读:
    NHibernate版本不一致问题
    .NET中AOP的几种实现方案
    转播
    看来不得不来谈谈这个首页精华区了
    事件与委托
    关于字符集和字符编码以及代码页的前前后后(续)
    让电脑像人脑一样思考,谁养鱼问题断言推理解法
    关于那个脑袋的很漂漂的图形的C#版本
    大家都有头像,我来测试下我的新头像。
    浅谈JavaScript中的对象和类型(上)
  • 原文地址:https://www.cnblogs.com/esileme/p/7467418.html
Copyright © 2020-2023  润新知