package cn.kaxlm6.shiro.test;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Created by IntelliJ IDEA.
*
* @author xlm
* description:
* path: mvtest-cn.kaxlm6.shiro.test-QuickstartCopy
* date: 2018/9/28 9:55
* version: 02.06
* To change this template use File | Settings | File Templates.
*/
public class QuickstartCopy {
private static final transient Logger log = LoggerFactory.getLogger(Quickstart.class);
public static void main(String[] args) {
/**
* 1.获取SecurityManager工厂,使用ini配置文件初始化SecurityManager
*/
IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
/**
* 2.获得SecurityManager实例,并绑定给SecurityUtils
*/
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
/**
* 3.获得Subject主体(即当前用户)
*/
Subject subject = SecurityUtils.getSubject();
/**
* 4.获得session:得到用户名与密码
*/
Session session = subject.getSession();
/**
* 测试数据
*/
session.setAttribute("username", "root");
session.setAttribute("password", "secret");
String username = session.getAttribute("username").toString();
String password = session.getAttribute("password").toString();
/**
* 5.测试当前的用户是否已经被认证,即是否已经登录
*/
if (!subject.isAuthenticated()) {
/**
* 6.将用户名/密码,封装成UsernamePasswordToken对象
*/
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
token.setRememberMe(true);
try {
/**
* 7.执行登录(即身份验证)
*/
subject.login(token);
/**
* 打印主体信息
*/
log.info("登录成功" + token.getPrincipal());
}
/**
* 8.认证异常
*/ catch (UnknownAccountException e) {
/**
* 若没有指定账户,则Shiro会抛出
*/
log.info("未找到指定账户" + token.getPrincipal());
} catch (IncorrectCredentialsException e) {
/**
* 若账户存在,但密码不匹配,则Shiro会抛了
*/
log.info("输入的密码有误" + token.getPrincipal());
} catch (LockedAccountException e) {
/**
* 用户被锁定的异常
*/
log.info("你输入的帐号已锁定" + token.getPrincipal());
} catch (AuthenticationException e) {
/**
* 所有认证时异常的父类
*/
log.info("认证异常父类" + token.getPrincipal());
}
/**
* 9.测试是否有某一个角色:schwartz
*/
String role = "schwartz";
if (subject.hasRole(role)) {
log.info(token.getPrincipal() + "用户具有" + role + "权限");
} else {
log.info(token.getPrincipal() + "用户不具有" + role + "权限");
}
/**
* 10.测试用户是否具备某一个行为(操作):lightsaber:weild
*/
String permission = "lightsaber:weild";
if (subject.isPermitted(permission)) {
log.info(token.getPrincipal() + "用户具有" + permission + "行为");
} else {
log.info(token.getPrincipal() + "用户不具有" + permission + "行为");
}
/**
* 11.退出
*/
subject.logout();
/**
* 12.检测是否退出
*/
subject.isAuthenticated();
}
}
}
IDEA Shiro Quickstart 文件
最新推荐文章于 2020-11-07 14:52:18 发布