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前端的交互,敬请期待!
原文地址:https://www.cnblogs.com/www-dzsblogs-com/p/14550662.html