建立一个java应用程序项目,项目及文件结构如图:
注意以下几点:
1、导入与Shiro相关的库,如图所示几个jar包,如运行时出现log4j相关的错误,则可能是log4j相关的包不正确;
2、shiro.ini文件的路径问题,应放在项目根路径下,内容为:
[users]
zwx=zavens
3、log4j.properties文件为可选文件,建议自己设置log4j属性,内容为:
log4j.rootLogger=TRACE, stdout
log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stdout.File=C:/log4j/log.txt
log4j.appender.stdout.Encoding=GBK
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.DatePattern='.'yyyy-MM-dd
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n
log4j.logger.net.sf.ehcache=WARN
log4j.logger.org.apache=WARN
log4j.logger.org.quartz=WARN
log4j.logger.org.apache.shiro=TRACE
log4j.logger.org.apache.shiro.util.ThreadContext=INFO
log4j.properties详细配置,请看:log4j.properties资源配置文件
4、shiroAp.java内容:
package shiroap;
import java.io.File;
import java.io.IOException;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
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 ShiroAp {
public static void main(String[] args) throws IOException {
Factory<SecurityManager> factory = new IniSecurityManagerFactory("shiro.ini");
SecurityManager sm=factory.getInstance();
SecurityUtils.setSecurityManager(sm);
Subject sub=SecurityUtils.getSubject();
if(sub.isAuthenticated()){
System.out.println("已登录,SESSION:" + sub.getSession());
}
System.out.println("未登录,SESSION:" + sub.getSession());
UsernamePasswordToken at=new UsernamePasswordToken ("zwx","zavens");
try{
sub.login(at);
}catch(Exception e){
System.out.println("验证没通过!");
}
if(sub.isAuthenticated()){
System.out.println("已登录,SESSION:" + sub.getSession());
}
}
}