快速上手
推荐查看官方sample下的例子
创建测试项目,此处使用maven引入依赖
pom.xml文件如下:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
</dependencies>
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
# General Apache libraries
log4j.logger.org.apache=WARN
# Spring
log4j.logger.org.springframework=WARN
# Default Shiro logging
log4j.logger.org.apache.shiro=TRACE
# Disable verbose logging
log4j.logger.org.apache.shiro.util.ThreadContext=WARN
log4j.logger.org.apache.shiro.cache.ehcache.EhCache=WARN
shiro.ini文件如下:
[users]
#提供了对用户/密码及其角色的配置,用户名=密码,角色1,角色2,...
root = secret, admin
guest = guest, guest
presidentskroob = 12345, president
darkhelmet = ludicrousspeed, darklord, schwartz
lonestarr = vespa, goodguy, schwartz
[roles]
#提供了角色及权限之间关系的配置,角色=权限1,权限2,...
admin = *
schwartz = lightsaber:*
goodguy = user:delete:test
Quickstart.java内容如下:
package com.demo.start;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Quickstart {
public static final Logger log = LoggerFactory.getLogger(Quickstart.class);
public static void main(String[] args) {
IniRealm realm = new IniRealm("classpath:shiro.ini");
//构建Security环境
DefaultSecurityManager securityManager = new DefaultSecurityManager();
securityManager.setRealm(realm);
//获取当前的Subject
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
//从主体中获取session,调用Subject#getSession()
Session session = subject.getSession();
session.setAttribute("test","demo");
String value = (String) session.getAttribute("test");
if (value.equals("demo")){
log.info("retrieved the correct value ! [" + value + "]");
}
//测试当前的用户是否认证通过,调用Subject#isAuthenticated()
if (!subject.isAuthenticated()) {
//把用户名密码存入UsernamePasswordToken对象
UsernamePasswordToken token = new UsernamePasswordToken("lonestarr","vespa");
//设置rememberme
token.setRememberMe(true);
try {
//执行登录操作
subject.login(token);
} catch (UnknownAccountException e) {
//若没有指定的账户
log.error("There is no user with username of " + token.getPrincipal());
return;
} catch (IncorrectCredentialsException e) {
//错误的凭证异常;账户存在,但密码错误
log.error("Password for account " + token.getPrincipal() + " was incorrect!");
return;
} catch (LockedAccountException e) {
//用户被锁定异常
log.error("The account for username " + token.getPrincipal() + " is locked. " +
"Please contact your administrator to unlock it.");
return;
} catch (AuthenticationException e) {
//所有认证异常的父类
log.error("authenticator failed");
return;
}
}
log.info("User [" + subject.getPrincipal() + "] logged in successfully.");
//测试是否拥有某一个角色,调用Subject#hasRole()
if (subject.hasRole("schwartz")) {
log.info("May the Schwartz be with you!");
} else {
log.info("Hello, mere mortal.");
}
//测试用户是否具备某一个行为,调用Subject#isPermitted()
if (subject.isPermitted("lightsaber:wield")) {
log.info("You may use a lightsaber ring. Use it wisely.");
} else {
log.info("Sorry, lightsaber rings are for schwartz masters only.");
}
//测试用户是否具备某一个行为
if (subject.isPermitted("user:delete:test")) {
log.info("You are permitted to 'delete' the user with license plate (id) 'test'. " +
"Here are the keys - have fun!");
} else {
log.info("Sorry, you aren't allowed to delete the 'test' user!");
}
log.info("---->"+ subject.isAuthenticated());
//登出
subject.logout();
log.info("---->"+ subject.isAuthenticated());
}
}
网友评论