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前端的交互,敬请期待!


浙公网安备 33010602011771号