• shiro权限框架-鉴权


                                  shiro权限框架-鉴权

      上期我们已经讲解了shiro的基本使用和入门基础,这期我来带大家了解一下shiro如何鉴定该用户是否拥有这个权限

    首先这里我不推荐大家直接使用 System.out.println()输出语句打印出想输出的内容,推荐大家使用log4j来进行打印。
    想使用log4j只需引入的包即可
    附上log4j的代码
    log4j.rootLogger=debug,console
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=[%d{yyyy-mm-dd}] -%p -%m%n

       多余的话就不说了直接上代码

    import org.apache.shiro.SecurityUtils;
    import org.apache.shiro.config.IniSecurityManagerFactory;
    import org.apache.shiro.mgt.SecurityManager;
    import org.apache.shiro.subject.Subject;
    import org.apache.shiro.util.Factory;
    
    public class ShiroUtils {
        public static Subject getSubject(){
            //读取shiro.ini文件获取Factory工厂
            Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-permission.ini");
    
            //获取factory实例并得到SecurityManager
            SecurityManager securityManager = factory.getInstance();
    
            //设置安全管理器
            SecurityUtils.setSecurityManager(securityManager);
    
            //反显出Subject对象
            return SecurityUtils.getSubject();
        }
    }

    首先编写一个工具类,这个工具类可以获取当前登录的对象,为了减少代码冗余,不理解的看博主的上一遍博客理解一下。

    编写完工具类以后就可以进行鉴权操作了,首先老规矩创建一个测试类Test

    鉴权流程:

    1.首先利用工具类获取Subject对象

    2.利用shiro权限框架自带的登录判断方法判断是否已经进行了认证

    3.鉴别当前登录的用户所拥有的权限简称(鉴权)

    接下来附上代码

    import org.apache.shiro.authc.UsernamePasswordToken;
    import org.apache.shiro.subject.Subject;
    import org.junit.Test;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.util.Arrays;
    
    public class Testpermission {
        /**
         * 基于权限permission的授权
         */
        private static final Logger logger = LoggerFactory.getLogger(Testpermission.class);
    
        @Test
        public void testpermission(){
            Subject subject = ShiroUtils.getSubject();
            if(!subject.isAuthenticated()){/*判断是否通过身份验证*/
                UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("admin","123");
                try {
                    subject.login(usernamePasswordToken);//登录
                    logger.info("登陆成功");
                }catch (Exception e){
                    logger.info("登录失败");
                    e.printStackTrace();
                }
    
                boolean permitted = subject.isPermitted("role:*");//是否被允许拥有权限
                if(permitted){
                    logger.info(subject.getPrincipal()+"具备role角色的全部权限");
                }
    
                boolean[] permitted1 = subject.isPermitted("role:*", "user:*");//是否被允许拥有多个权限
                logger.info(subject.getPrincipal()+"是否具备role角色的全部权限和user角色的全部权限"+ Arrays.toString(permitted1));
            }
    
            subject.logout();
        }
    }

    老规矩和大家一一解释其中方法的作用

    isAuthenticated():判断是否通过身份验证
    login():登录
    isPermitted():是否被允许拥有权限,这个方法是进行了重载的,可以填一个或多个权限
    getPrincipal():获取当前登录对象的用户名

    其实鉴权的操作非常简单,只是调用Subject对象内置的方法来进行一个判断,
    下期将带来shiro权限框架与web前端的交互,敬请期待!
  • 相关阅读:
    TypeScript入门
    github个人博客绑定单独阿里域名指南
    搜索引擎命令大全!
    Linux入门基础篇
    CSS之BFC、IFC、FFC and GFC
    陀螺仪属性介绍和实战
    web语义化,从松散到实战
    前端跨域深入理解
    快速安装自己的Sublime系列
    hint.css使用说明
  • 原文地址:https://www.cnblogs.com/www-dzsblogs-com/p/14550662.html
Copyright © 2020-2023  润新知