先来看IniRealm,这是读取.ini文件来获取用户数据、角色数据、权限数据的,编写格式为:
[users]
账号1=密码,角色1 ,角色2,……,角色n
账号2=密码,角色1 ,角色2,……,角色n
[roles]
角色1=权限1,权限2,………,权限n
角色2=权限1,权限2,………,权限n
下面有一个名为userAndRole.ini的文件:
[users]
hello=123456,admin,member
[roles]
superAdminRole=user:update,user:delete,user:save,user:list
admin=user:update,user:save,user:list
member=user:update,user:list
说实话没有任何项目会把用户数据、权限数据、角色数据放在一个ini文件里,所以这个学学就好,不会真的用到的。一般用JdbcRealm或自定义Realm。
/**
* 授权与登录认证过程的演示案例
*
* @param args
*/
public static void main(String[] args) {
String username = "hello";
String password = "123456";
//用IniRealm读取ini文件里配置的用户信息和角色(权限)信息
IniRealm iniRealm = new IniRealm("C:/Users/hp/Desktop/userAndRole.ini");
//1:构建securityManager环境
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
defaultSecurityManager.setRealm(iniRealm);
//2:主体提交认证请求
SecurityUtils.setSecurityManager(defaultSecurityManager);
Subject subject = SecurityUtils.getSubject();
//3:登录(Shiro接管了登录功能),如果传入的账号密码和simpleAccountRealm对象的不同则会账号或密码错误的异常
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
subject.login(token);
//3:检查当前用户是否有指定权限,检查对当用户是不是指定角色
subject.checkPermissions("user:save", "user:update");
subject.checkRoles("admin", "member");
//查看认证结果
System.out.println("认证结果:" + subject.isAuthenticated());
}