您的位置:首页 > 其它

shiro授权入门程序

2017-05-18 21:55 288 查看
先写一个配置文件,模拟数据库shiro-permission.ini

#用户
[users]
#用户zhang的密码是123,此用户具有role1和role2两个角色
zhang=123,role1,role2
wang=123,role2

#权限
[roles]
#角色role对资源user拥有什么样的权限
role1=user:create,user:update
role2=user:create,user:delete
role3=user:create

#权限标示符号     资源:操作:实例(中间使用 :)
# user:create:01 表示对user资源的01实例进行create操作
# user:create  示对用户资源进行create操作,相当于user:create:*,对所有用户资源实例进行create操作。
# user:*:01  表示对用户资源实例01进行所有操作。


编写测试程序

package com.mo.authorization;

import java.util.Arrays;

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.subject.Subject;
import org.apache.shiro.util.Factory;
import org.junit.Test;
import org.apache.shiro.mgt.SecurityManager;
public class AuthorizationTest {

@Test
public void test1(){

//创建securityManager工厂,通过ini配置文件创建securityManager
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-permission.ini");

//通过factory工厂,创建securityManager
SecurityManager securityManager = factory.getInstance();

//将securityManager设置当前的运行环境中
SecurityUtils.setSecurityManager(securityManager);

//从SecurityUtils里面创建一个subject,subject就是主体
Subject subject = SecurityUtils.getSubject();

//在认证提价前,准备token,token就是一个令牌,用户和密码
UsernamePasswordToken token = new UsernamePasswordToken("zhang","123");

//执行认证的提交
try {
//执行认证的提交,认证不通过就会抛出异常
subject.login(token);
} catch (AuthenticationException e) {
e.printStackTrace();
}

//这是认证是否通过,返回的是boolean类型的数据类型
boolean isAuthenticated = subject.isAuthenticated();
System.out.println("是否认证通过"+isAuthenticated);

//认证成功进行授权

//基于角色的授权,这个subject有没有这个权限,返回的是boolean数据类型
boolean ishasRole = subject.hasRole("role1");
System.out.println("单个角色判断" + ishasRole);

boolean isAllhasRole = subject.hasAllRoles(Arrays.asList("role1","role2"));
System.out.println("多个角色判断" + isAllhasRole);

//基于资源的授权,这个subject有没有这个资源的访问权限,返回的是boolean数据类型
boolean ishasPermitted = subject.isPermitted("user:create");
System.out.println("单个权限判断"+ishasPermitted);

boolean ishasAllPermitted = subject.isPermittedAll("user:create","user:update");
System.out.println("多个权限判断"+ishasAllPermitted);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: