zoukankan      html  css  js  c++  java
  • shiro的角色和权限

    s首先要将读取文件的方法封装,只需要传入文件,用户名和密码即可登陆

    package com.java.shiro.common;

    import org.apache.shiro.SecurityUtils;
    import org.apache.shiro.authc.AuthenticationException;
    import org.apache.shiro.authc.UsernamePasswordToken;
    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 ShiroUtil {

    public static Subject login(String configFile, String userName, String password) {
    // 读取shiro配置文件,初始化SecurityManager工厂
    Factory<SecurityManager> factory = new IniSecurityManagerFactory(configFile);
    // 获取securityManager实例
    SecurityManager securityManager = factory.getInstance();
    // 把securityManager实例绑定到SecurityUtils
    SecurityUtils.setSecurityManager(securityManager);
    // 得到当前执行的用户
    Subject currentUser = SecurityUtils.getSubject();
    // 创建用户令牌,用户名/密码
    UsernamePasswordToken token = new UsernamePasswordToken(userName, password);

    try {
    // 身份认证
    currentUser.login(token);

    System.out.println("登陆成功");
    } catch (AuthenticationException e) {
    e.printStackTrace();
    System.out.println("身份认证失败");
    }
    // 退出
    return currentUser;

    }
    }

    1,判断角色,首先配置角色ini文件

    文件名:shiro_role.ini

    [users]
    java1234=1234,role1,role2
    jack=123,role1

    *****测试方法

    package com.java.shiro;

    import static org.junit.Assert.*;

    import java.util.Arrays;

    import org.apache.shiro.subject.Subject;
    import org.junit.Test;

    import com.java.shiro.common.ShiroUtil;

    public class RoleTest {

    @Test
    public void testHasRole() {
    Subject currentUser = ShiroUtil.login("classpath:shiro_role.ini", "java1234", "1234");
    // System.out.println(currentUser.hasRole("role2")?"有role2":"没有role2");

    // boolean[] booleans = currentUser.hasRoles(Arrays.asList("role1","role2","role3"));
    // for (boolean b : booleans) {
    // System.out.println(b);
    // }

    System.out.println(currentUser.hasAllRoles(Arrays.asList("role1","role2"))?"有两个权限":"不足两个权限");

    //判断完之后要加logout()
    currentUser.logout();
    }


    @Test
    public void testCheckRole() {
    Subject currentUser = ShiroUtil.login("classpath:shiro_role.ini", "java1234", "1234");
    // System.out.println(currentUser.hasRole("role2")?"有role2":"没有role2");

    // boolean[] booleans = currentUser.hasRoles(Arrays.asList("role1","role2","role3"));
    // for (boolean b : booleans) {
    // System.out.println(b);
    // }
    // currentUser.checkRole("role8");
    //传一个数组集合,都有不报错,没有其中一个或多个都会报错
    currentUser.checkRoles(Arrays.asList("role1","role2"));
    //传多个字符串
    currentUser.checkRoles("role1","role2","role3");
    // System.out.println(currentUser.hasAllRoles(Arrays.asList("role1","role2"))?"有两个权限":"不足两个权限");

    //判断完之后要加logout()
    currentUser.logout();
    }


    }

    2,权限判断,首先配置角色ini文件

    文件名:shiro_permission.ini

    [users]
    java1234=1234,role1,role2
    jack=123,role1

    [roles]
    role1=user:select
    role2=user:select,user:add,user:delete

    *****测试方法

    package com.java.shiro;

    import static org.junit.Assert.*;

    import java.util.Arrays;

    import org.apache.shiro.subject.Subject;
    import org.junit.Test;

    import com.java.shiro.common.ShiroUtil;

    public class PermissionTest {

    @Test
    public void testIsPermitted() {
    Subject currentUser = ShiroUtil.login("classpath:shiro_permission.ini", "java1234", "1234");
    //判断是否有user的select权限
    boolean result = currentUser.isPermitted("user:update");
    ////判断是否有user的后面的权限,返回boolean数组
    boolean [] results = currentUser.isPermitted("user:select","user:add","user:update");
    for (boolean b : results) {
    System.out.println(b+"权限");
    }
    //全有返回true,不全有返回false
    boolean all = currentUser.isPermittedAll("user:add","user:update");
    System.out.println(all+"权限");

    // System.out.println(result+"权限");

    //判断完之后要加logout()
    currentUser.logout();


    }



    @Test
    public void testCheckPermitted() {
    Subject currentUser = ShiroUtil.login("classpath:shiro_permission.ini", "java1234", "1234");
    //有权限无返回,没权限抛出异常
    currentUser.checkPermission("user:add");
    //权限都有无返回,不全有抛出异常
    currentUser.checkPermissions("user:update","user:select");



    //判断完之后要加logout()
    // currentUser.logout();


    }

    }

  • 相关阅读:
    动态规划设计:最长递增子序列
    经典动态规划:编辑距离
    经典动态规划:子集背包问题
    iOS开发网络篇—HTTP协议
    IOS之Core Foundation框架和Cocoa Foundation框架的区别
    iOS开发多线程篇—GCD简介
    iOS-UIImage变为NSData并进行压缩
    iOS开发UI之Quartz2D使用(绘制基本图形)
    UIImagePickerController
    mac下搭建discuz论坛
  • 原文地址:https://www.cnblogs.com/1736gerr/p/6870115.html
Copyright © 2011-2022 走看看