首先我们要介绍一下shrio
有关的shrio的简介请参考:
http://wiki.jikexueyuan.com/project/shiro/overview.html
然后我们就要来第一个shrio的程序了。
1. 添加依赖,使用的是Maven(如果还在用原始jar包构建项目的的读者朋友了可以考虑更换了,Maven依赖只要一个pom文件就能管理你的项目几乎所有的jar包依赖)
<dependencies>
<!--shrio支持测试,所以直接添加-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<!--shrio核心包-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
<!--下面是项目日志需要的slf4j和log4j的依赖包,没有下面的依赖,运行会曝出没有找到一些类-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
注意上面的依赖,缺一不可,使用maven的朋友们直接复制就好
2.加入了日志依赖,我们就不可或缺的要一个log4j.properties文件了
#config root logger
log4j.rootLogger = INFO,system.out
log4j.appender.system.out=org.apache.log4j.ConsoleAppender
log4j.appender.system.out.layout=org.apache.log4j.PatternLayout
log4j.appender.system.out.layout.ConversionPattern=MINAServer Logger-->%5p{%F:%L}-%m%n
#config this Project.file logger
log4j.logger.thisProject.file=INFO,thisProject.file.out
log4j.appender.thisProject.file.out=org.apache.log4j.DailyRollingFileAppender
log4j.appender.thisProject.file.out.File=logContentFile.log
log4j.appender.thisProject.file.out.layout=org.apache.log4j.PatternLayout
3. 下面我们就要简单实现用户验证的一个例子,为了简单,我们模拟数据库的两个用户写入shrio.ini中
[users]
zhang=123
wang=123
4. 创建测试类来试试我们的shrio
public class ShrioHelloWorld {
@Test
public void testHelloWorld(){
//1、获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManager
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//2、得到SecurityManager实例 并绑定给SecurityUtils
SecurityManager securityManager = factory.getInstance();
// SecurityUtils设置安全管理对象
SecurityUtils.setSecurityManager(securityManager);
//3、得到Subject及创建用户名/密码身份验证Token(即用户身份/凭证)
Subject subject = SecurityUtils.getSubject();
//根据虚拟用户名设置一个token
UsernamePasswordToken token = new UsernamePasswordToken("wang", "123");
try {
//4、登录,即身份验证,如果token的用户信息和ini文件的信息不匹配,那么就失败怕出异常。
subject.login(token);
System.out.println("验证成功!!");
} catch (AuthenticationException e) {
//5、身份验证失败
System.out.println("登陆验证失败");
e.printStackTrace();
}
//断言用户已经登录
Assert.assertEquals(true, subject.isAuthenticated());
//6、退出
subject.logout();
}
}
好了,这样的一个小例子就完了,测试的时候,可以修改token中用户的信息,比如username为赵 密码为111(这种情况下无疑会输出验证失败,然后抛出异常信息)。
下面总结一下学习新技术的方法:
1. 敲代码
2. 测试
3. 修改一些信息或者一写参数。在测试。
4. 记住这些特征,然后思考哪些能动态控制,哪些是固定的。
5. 思考那些地方用得到这个技术。