您的位置:首页 > 其它

Shrio的入门例子,从基础教你使用shrio

2017-11-03 17:28 766 查看
首先我们要介绍一下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. 思考那些地方用得到这个技术。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息