首先创建一个空 Maven 工程:略
添加依赖
在pom.xml中加入jar包的配置:
org.apache.shiro
shiro-core
1.2.3
org.slf4j
slf4j-log4j12
1.6.1
org.slf4j
slf4j-api
1.6.1
配置文件
log4j.properties
log4j.rootLogger=INFO, stdout, log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
【Shiro|Shiro 入门实例】
shiro.ini
#用户名=密码,角色1,角色2...,角色n
[users]
root = secret, admin
guest = guest, guest
test = 123456, role1, role2
# -----------------------------------------------------------------------------
# Roles with assigned permissions
# roleName = perm1, perm2, ..., permN
# 角色名=权限1,权限2...权限n
# -----------------------------------------------------------------------------
[roles]
admin = *
guest = guest
role1=perm1,perm2
role2=perm3
配置说明:
- 配置文件中包含两个部分用户[users]和角色[roles]
- 用户配置的格式是:
用户名=密码,角色1,角色2,...角色n
如:test=123456,role1,role2
用户名是 test,密码是123456,拥有两个角色role1和role2 - 一个用户可以具有多个角色。注意逗号是英文的。
- 角色配置的格式是:
角色名=权限1,权限2…权限n
如:
role1=perm1,perm2
角色名是role1,拥有perm1和perm2两个权限。
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.apache.shiro.util.Factory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ShiroTest {
private static final transient Logger log =
LoggerFactory.getLogger(ShiroTest.class);
public static void main(String[] args) {
//1. 这里的SecurityManager是org.apache.shiro.mgt.SecurityManager
// 而不是java.lang.SecurityManager
// 加载配置文件
Factory factory =
new IniSecurityManagerFactory("classpath:shiro.ini");
//2.解析配置文件,并且返回一些SecurityManger实例
SecurityManager securityManager = factory.getInstance();
//3.将SecurityManager绑定给SecurityUtils
SecurityUtils.setSecurityManager(securityManager);
// 安全操作,Subject是当前登录的用户
Subject currentUser = SecurityUtils.getSubject();
// 测试在应用的当前会话中设置属性
Session session = currentUser.getSession();
//放进去一个key和一个value
session.setAttribute("someKey", "aValue");
//根据key拿到value
String value = https://www.it610.com/article/(String) session.getAttribute("someKey");
if ("aValue".equals(value)) {//比较拿到的值和原来的值是否一致
log.info("检索到正确的值[" + value + "]");
}
//尝试进行登录用户,如果登录失败了,我们进行一些处理
if (!currentUser.isAuthenticated()) {//如果用户没有登录过
//new UsernamePasswordToken(用户名,密码)
UsernamePasswordToken token =
new UsernamePasswordToken("test", "123456");
token.setRememberMe(true);
//是否记住用户
try {
currentUser.login(token);
//当我们获登录用户之后
log.info("用户 [" + currentUser.getPrincipal() + "] 登陆成功");
// 查看用户是否有指定的角色
if (currentUser.hasRole("admin")) {
log.info("您有admin角色");
} else {
log.info("您没有admin角色");
}
if (currentUser.hasRole("role1")) {
log.info("您有role1角色");
} else {
log.info("您没有role1角色");
}// 查看用户是否有某个权限
if (currentUser.isPermitted("perm1")) {
log.info("您有perm1权限");
} else {
log.info("您没有perm1权限");
}
if (currentUser.isPermitted("guest")) {
log.info("您有guest权限");
} else {
log.info("您没有guest权限");
}
//登出
currentUser.logout();
} catch (UnknownAccountException uae) {
log.info(token.getPrincipal() + "账户不存在");
} catch (IncorrectCredentialsException ice) {
log.info(token.getPrincipal() + "密码不正确");
} catch (LockedAccountException lae) {
log.info(token.getPrincipal() + "用户被锁定了 ");
} catch (AuthenticationException ae) {
//无法判断是什么错了
log.info(ae.getMessage());
}
}
}
}