shiro-学习1-shiro快速入门

     shiro是一框简易的认证授权的开源框架,开源使用它快速的完成权限管理。网上的资料很多,具体详细的就不多说了,这里只记录下怎么快速的使用:

     shiro的架构图如下:

     上面的架构图,开源看出用户信息和权限信息都在Realm中,在Authenticator中进行认证,在Authorizer中进行授权。

      SessionManager是session管理器,SessionDao是把session存入到缓存中,CacheManager是缓存管理器,前面的这些组件都是属于Security Manager的管理范围。

一,Shiro的认证

       下面会进行shiro认证的小demo,上图是认证的流程,shiro的认证主要分为两步:

1,构建SecurityManager环境

扫描二维码关注公众号,回复: 4416726 查看本文章

2,主体提交认证请求

    

/**
     * 1,认证
     */
    public static void testAuthentication1() {
        //创建一个SimpleAccountRealm
        SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();
        //添加一个账号
        simpleAccountRealm.addAccount("jack", "123456");
        //1,构建SecurityManager环境
        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
        //设置Realm
        defaultSecurityManager.setRealm(simpleAccountRealm);

        //2,主体提交认证请求
        SecurityUtils.setSecurityManager(defaultSecurityManager);
        //获取主体
        Subject subject = SecurityUtils.getSubject();
        //用户名和密码的token
        UsernamePasswordToken token = new UsernamePasswordToken("jack", "123456");
        //进行登入
        subject.login(token);
        System.out.println("是否权限认证:isAuthenticated=" + subject.isAuthenticated());
        //登出logout
        subject.logout();
        System.out.println("是否权限认证:isAuthenticated=" + subject.isAuthenticated());
    }

   上面是具体的实现代码,如果登入的信息中用户名或者密码错误就会抛出异常。

subject.isAuthenticated()方法判断是否认证成功了。

subject.login(token);用于主体提交认证

subject.logout();实现登出

二,授权,角色检查
       

       上面的小demo是shiro实现认证的一个过程,做权限管理的时候,分为两块,一个认证,一个是授权,认证是判断用户是否账号密码正确,授权是判断用户登入以后有什么权限(菜单权限,CRUD权限,功能权限)

       授权的过程也很简单,请看下面的小demo:

/**
     * 2,授权
     */
    public static void testAuthentication2() {
        //创建一个SimpleAccountRealm
        SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();
        //添加一个账号,并赋予一个权限
        //simpleAccountRealm.addAccount("jack", "123456","admin");
        simpleAccountRealm.addAccount("jack", "123456","admin","user");
        //1,构建SecurityManager环境
        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
        //设置Realm
        defaultSecurityManager.setRealm(simpleAccountRealm);

        //2,主体提交认证请求
        SecurityUtils.setSecurityManager(defaultSecurityManager);
        //获取主体
        Subject subject = SecurityUtils.getSubject();
        //用户名和密码的token
        UsernamePasswordToken token = new UsernamePasswordToken("jack", "123456");
        //进行登入
        subject.login(token);
        System.out.println("是否权限认证:isAuthenticated=" + subject.isAuthenticated());
        //登入成功以后,检查是否有某个权限
        //subject.checkRole("admin");
        //检查多个权限
        subject.checkRoles("admin","user");
        //System.out.println("是否权限认证:isAuthenticated=" + subject.checkRole("admin"));
    }

         上面的代码注释已经写的很清楚了,其他的就不多啰嗦了,上面的例子主要是用来判断用户是否有角色权限,如果没有会抛出异常,可以自行试验。

源码地址:

源码

总结:

上面只是shiro的开胃小菜,最简单的shiro使用,想要了解的shiro原理的可以看shiro的源码,后面会陆续给出shiro其他学习总结。

欢迎加群交流:331227121

猜你喜欢

转载自blog.csdn.net/wj903829182/article/details/84889400