Shiro学习第一式身份验证1

本来应该学习Maven的,从网上下载了Maven3.2.5,也配置好了!但是没法用,一用就报错,问度娘!结果很不幸,好像必须能上外网。买了表的,这让我们断网狗怎么用啊!公司基于安全方面的考虑,内外网都是物理隔绝的,算了,不学Maven了,等能上网了再学吧!还是学习Shiro吧!

Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能

Shiro能做什么

认证:验证用户来核实他们的身份

授权:对用户执行访问控制,如:判断用户是否被分配了一个确定的安全角色

判断用户是否被允许做某事

会话管理:在任何环境下使用Session API,即使没有Web 或EJB 容器。

加密:以更简洁易用的方式使用加密的功能,保护或隐藏数据防止被偷窥

Realms:聚集一个或多个用户安全数据的数据源,并作为一个单一的复合用户

“视图”。

启用单点登录(SSO)功能。

为没有关联到登录的用户启用"Remember Me"服务

其它的自己百度。好像我们学习任何一种编程语言都是从HelloWorld开始的,这次也不例外,介绍一下开发工具和开发环境,jdk1.6.0_43+Tomcat6.0.29+MyEclipse10.5,没有使用Maven。

一、新建web工程,工程名为ShrHello,选择Java EE5.0

二、在src下新建shiro.ini文件

[users]

zhang=1234,role1

wang=123,role2

[roles]

role1=p1

role2=p2

三、大体解释一下上面的意思,分别建立了两个用户,两个角色

用户名:zhang

密码:1234

角色: role1

用户名:wang

密码:123

角色: role2

四、新建类HelloWorldTest.java

package com.shiro.test;

import org.apache.shiro.SecurityUtils;

import org.apache.shiro.authc.AuthenticationException;

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;

/**

*

* 类名: HelloWorldTest.java

* 作者: 张述飞

* 创建时间: 2016-2-16下午2:32:14

* 版本: V1.0

* 功能描述:

*/

public class HelloWorldTest {

public static void main(String[] args) {

//1、获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManager

Factory<SecurityManager> factory = newIniSecurityManagerFactory("classpath:shiro.ini");

//2、得到SecurityManager实例,并绑定给SecurityUtils

SecurityManager securityManager = factory.getInstance();

SecurityUtils.setSecurityManager(securityManager);

//3、得到Subject及创建用户名/密码身份验证Token(即用户身份/凭证)

Subject subject = SecurityUtils.getSubject();

UsernamePasswordToken token = new UsernamePasswordToken("zhang", "1234");

try {

//4、登录,即身份验证

subject.login(token);

//权限验证

boolean flag = subject.isPermitted("p1");

System.out.println("flag==="+flag);

System.out.println("登陆成功,Hello World");

} catch (AuthenticationException e) {

//5、身份验证失败

e.printStackTrace();

System.out.println("登陆失败!");

}

//6、退出

subject.logout();

}

}

五、需导入的jar包

commons-logging-1.1.3.jar

shiro-core-1.2.4.jar

slf4j-api-1.7.9.jar

slf4j-jdk14-1.7.9.jar

六、测试

运行HelloWorldTest.java,

控制台会显示

2016-2-16 16:48:36org.apache.shiro.session.mgt.AbstractValidatingSessionManagerenableSessionValidation

信息: Enabling session validation scheduler...

flag===true

登陆成功,Hello World!

七、这是我在做项目时遇到的几个错误,写下来以备再查!

Exception in thread"main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

atorg.apache.shiro.config.IniFactorySupport.<clinit>(IniFactorySupport.java:38)

atcom.shiro.test.HelloWorldTest.main(HelloWorldTest.java:18)

Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory

atjava.net.URLClassLoader$1.run(URLClassLoader.java:202)

atjava.security.AccessController.doPrivileged(Native Method)

atjava.net.URLClassLoader.findClass(URLClassLoader.java:190)

atjava.lang.ClassLoader.loadClass(ClassLoader.java:306)

atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

atjava.lang.ClassLoader.loadClass(ClassLoader.java:247)

...2 more

这个提示是没有导入slf4j-api-1.7.9.jar、slf4j-jdk14-1.7.9.jar这两个jar包

这是第一个Shiro程序,主要学习的是Shiro身份验证,基本上都是这么一个流程,验证用用户名密码是否正确-根据用户名查找对应的功能权限!

代码下载地址:http://download.csdn.net/detail/zhangshufei8001/9440424

猜你喜欢

转载自zhangshufei8001.iteye.com/blog/2377297