shiro认证授权-角色认证
1、授权也称为访问控制,即:某一个资源库中的哪些资源允许当前用户来进行处理操作,而在整个的授权之中实际上会包含以下几个概念:授权主题(Subject)、资源(Resource)、权限(Permission)、角色(Role)。固定角色所谓的固定角色操作指的是直接利用配置文件进行操作实现。该实现要求在“[users]”下进行,而且配置的形式为:“用户名=密码,角色”。1、定义一个shiro.ini的文件。[users]admin=hello,member,deptbaidu=java,dept,emp

2、在当前的两个用户下:admin用户具备有member与dept的操作角色,而baidu具备有dept与emp的操作角色。在shiro之中Subject接口描述的是用户的主体信息,所以针对于角色的认证处理都在此接口中提供,,包括如下的方法:void checkRole(String roleIdentifier) throws AuthorizationException;检测一个角色是否存在。

3、检测角色:package com.gwolf.shiro;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.UsernamePasswordToken;import org.apache.shiro.config.IniSecurityManagerFactory;import org.apache.shiro.mgt.SecurityManager;import org.apache.shiro.subject.Subject;public class TestLoginDemo { public static void main(String[] args) { //取得Factory接口对象,主要的目的是通过配置文件加载文之中的信息,这些信息暂时不能成为认证信息 //取得里面所保存的所有的认证数据信息 SecurityManager securityManager = new IniSecurityManagerFactory("classpath:shiro.ini").getInstance(); //利用一个专门的认证操作的处理类,实现认证处理的具体实现 SecurityUtils.setSecurityManager(securityManager); //获取进行用户名和密码认证的接口对象 Subject subject = SecurityUtils.getSubject(); subject.login(new UsernamePasswordToken("admin", "hello")); subject.checkRole("dept"); }}

4、包含指定的角色,则程序可以正常执行完毕。不包含指定的角色,则程序会抛出异常:

5、使用判断检测是否有指定的角色:subject.hasRole("dept")

6、判断是否有多个角色: Set<String> allRoles = new HashSet<>(); allRoles.add("member"); allRoles.add("dept"); System.out.println(subject.hasAllRoles(allRoles));

7、整个的处理里面发现用户的登陆和角色的认证是分两个部分完成的。