这篇文章主要是能够掌握Shiro的一些常用API和了解JAVASE环境Shiro的用户、角色、权限认证过程
首先创建一个Shiro JAVASE项目(创建时选择JAVA Project),创建好后目录结构如下:
log4j.properties、shiro.ini文件可以在官网(http://shiro.apache.org/download.html)下载,下载时选择ZIP文件,然后解压后在(D:\heyongjie\Desktop\shiro-root-1.3.2-source-release\shiro-root-1.3.2\samples\quickstart)目录下面,samples下面有很多shiro准备好的文件,quickstart是适合javase项目的环境!
jar包可以自己baidu下载,找不到可以留下联系方式!
下面我们看一下shiro.ini文件(不能直接打开,需要右键-->open With --> Text Editor,eclipse要这样,IDEA工具打开应该不会乱码)
很多都是注释掉的
主要看 [users] [roles]这二个
API将在代码中进一步讲解,请看代码:
package com.shiro;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloShiro {
private static final Logger log = LoggerFactory.getLogger(HelloShiro.class);
public static void main(String [] atgs){
// 1.获得安全管理器
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
// 2.设置安全管理器
SecurityUtils.setSecurityManager(securityManager);
// 获得Subject对象 即即将登陆的对象
Subject cerrentUser = SecurityUtils.getSubject();
// 获得session对象
Session session = cerrentUser.getSession();
session.setAttribute("name", "hyj");
String value = (String) session.getAttribute("name");
if(value != null){
log.info(value);
}
// 判断是否登陆
if(cerrentUser.isAuthenticated() == false){
// 设置用户名和密码 必须是shiro.ini文件里面存在的
UsernamePasswordToken tocken = new UsernamePasswordToken("root", "secret");
// 是否记住我
tocken.setRememberMe(true);
// 登陆
try {
cerrentUser.login(tocken);
log.info("登陆成功 ");
} catch (UnknownAccountException e) {
log.info("用户名不存在 ");
} catch (IncorrectCredentialsException e){
log.info("密码错误 ");
} catch (LockedAccountException e){
log.info("用户已经锁死");
}catch (AuthenticationException e){
log.info("认证失败 ");
}
}
// 判断该用户是否具有某种角色 ini里面有的
if(cerrentUser.hasRole("admin")){
log.info("拥有指定的角色");
}else{
log.info("不拥有指定的角色");
}
// 判断该用户是否拥有制定的权限
if(cerrentUser.isPermitted("winnebago:drive:eagle5")){
log.info("拥有指定的权限");
}else{
log.info("不拥有指定的权限");
}
// 退出登陆
cerrentUser.logout();
}
}
要看清楚引入的JAR包,不要引入错了!!
当然不懂的有视屏:直接腾讯课堂里面搜shiro,里面有详细的讲解!