shiro

146 阅读1分钟

shiro是什么?

  • Shiro权限管理框架(权限管理系统的非常优秀的解决方案)
  • Apache顶级项目。项目除了能做认证和授权外,还有Session管理,加密,缓存...

shiro架构

  • Subject:主体(用户,第三方项目)
  • SecurityManager:安全管理器
    • 负责对subject进行认证和授权
    • 调用Authenticator进行认证
    • 调用Authorizer进行授权 ...
  • Authenticator:认证器
    • 负责实现认证
    • 项目中会使用到它的一些实现类来进行真正地认证实现(ModularRealmAuthenticator)
  • Authorizer:授权器
    • 负责实现授权
    • ModularRealmAuthorizator来进行授权
  • Realm:与数据库打交道
    • 相当于项目中DAO对象
  • SessionManager:会话管理器
    • 会话管理
    • 不依赖于Web环境
  • CacheManager:缓存管理器
    • 缓存管理
    • 一般与EhCache集成

shiro认证

  • 执行流程
Subject-->SecurityManager-->Authenticator-->Realm
  • 导包,建立Shiro的ini配置文件(shiro-demo.ini)
[users]
zhangsan=123456
lisi=123456
  • 测试代码
@Test
    public void test(){
        //todo 实例化IniSecurityManagerFactory
        IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro-demo.ini");
        //todo 获取到SecurityManager
        SecurityManager securityManager = factory.getInstance();
        //todo 将SecurityManager对象注入到工具类(SecurityUtils)
        SecurityUtils.setSecurityManager(securityManager);
        //todo 获取主体
        Subject subject = SecurityUtils.getSubject();
        //todo 假设输入域输入的用户名以及密码的信息
        String username = "zhangsan";
        String password = "123456";
        //todo Token 令牌
        UsernamePasswordToken token=new UsernamePasswordToken(username,password);
        try {
            //todo 主体进行认证
            subject.login(token);
        } catch (AuthenticationException e) {
            e.printStackTrace();
        }
        //todo 测试是否认证通过
        boolean flag = subject.isAuthenticated();
        System.out.println("认证结果为:"+flag);
        //todo 进行注销(退出)
        subject.logout();
        flag = subject.isAuthenticated();
        System.out.println("认证结果为:"+flag);
    }
- UnknownAccountException:没有该账户
- IncorrectCredentialsException:不正确的凭证(密码没有匹配)

shiro认证的自定义Realm