shiro认证

shiro认证

1.1 认证流程

分享牛系列,分享牛专栏,分享牛。shiro认证分析,shiro认证原理分析。

 

1.2 入门程序(用户登陆和退出)

1.2.1 创建java工程

jdk版本:1.7.0_72

eclipse:elipse-indigo

1.2.2 加入shiro-core的Jar包及依赖包

 

1.2.3 log4j.properties日志配置文件

log4j.rootLogger=debug, 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

1.2.4 shiro.ini

通过Shiro.ini配置文件初始化SecurityManager环境。

 

 

在eclipse配置后,在classpath创建shiro.ini配置文件,为了方便测试将用户名和密码配置的shiro.ini配置文件中:

[users]
zhang=123
lisi=123

1.2.5 认证代码

// 用户登陆、用户退出
	@Test
	public void testLoginLogout() {

		// 构建SecurityManager工厂,IniSecurityManagerFactory可以从ini文件中初始化SecurityManager环境
		Factory<SecurityManager> factory = new IniSecurityManagerFactory(
				"classpath:shiro.ini");

		// 通过工厂创建SecurityManager
		SecurityManager securityManager = factory.getInstance();

		// 将securityManager设置到运行环境中
		SecurityUtils.setSecurityManager(securityManager);

		// 创建一个Subject实例,该实例认证要使用上边创建的securityManager进行
		Subject subject = SecurityUtils.getSubject();

		// 创建token令牌,记录用户认证的身份和凭证即账号和密码
		UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123");

		try {
			// 用户登陆
			subject.login(token);
		} catch (AuthenticationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// 用户认证状态

		Boolean isAuthenticated = subject.isAuthenticated();

		System.out.println("用户认证状态:" + isAuthenticated);

		// 用户退出

		subject.logout();

		isAuthenticated = subject.isAuthenticated();

		System.out.println("用户认证状态:" + isAuthenticated);

	}

1.2.6 认证执行流程

1、 创建token令牌,token中有用户提交的认证信息即账号和密码

2、 执行subject.login(token),最终由securityManager通过Authenticator进行认证

3、 Authenticator的实现ModularRealmAuthenticator调用realm从ini配置文件取用户真实的账号和密码,这里使用的是IniRealm(shiro自带)

4、 IniRealm先根据token中的账号去ini中找该账号,如果找不到则给ModularRealmAuthenticator返回null,如果找到则匹配密码,匹配密码成功则认证通过。

1.2.7 常见的异常

 UnknownAccountException

账号不存在异常如下:

org.apache.shiro.authc.UnknownAccountException: No account found for user。。。。

IncorrectCredentialsException

当输入密码错误会抛此异常,如下:

org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - zhangsan, rememberMe=false] did not match the expected credentials.

更多如下:

DisabledAccountException(帐号被禁用)

LockedAccountException(帐号被锁定)

ExcessiveAttemptsException(登录失败次数过多)

ExpiredCredentialsException(凭证过期)等

 分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) java架构师交流群 523988350

时间: 2024-09-16 22:03:02

shiro认证的相关文章

shiro初步 shiro认证

什么是shiro shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证.用户授权. spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单. shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro. 使用shiro实现系统 的权限管理,有效提高开发效率,从而降低开发成本

Apache Shiro 使用手册(二) Shiro 认证_Linux

一.Shiro认证过程 1.收集实体/凭据信息 复制代码 代码如下: //Example using most common scenario of username/password pair:UsernamePasswordToken token = new UsernamePasswordToken(username, password);//"Remember Me" built-in:token.setRememberMe(true); UsernamePasswordTok

Shiro认证产生的 java.security.InvalidKeyException: Invalid AES key length: 58 bytes

问题描述 这个错误是咋回事呢?org.apache.shiro.crypto.CryptoException: Unable to init cipher instance.at org.apache.shiro.crypto.JcaCipherService.init(JcaCipherService.java:495) ~[shiro-all-1.2.3.jar:1.2.3]at org.apache.shiro.crypto.JcaCipherService.initNewCipher(J

浅析Apache Shiro在Web项目中的应用

用户权限模型 在揭开 Shiro 面纱之前,我们需要认知用户权限模型.本文所提到用户权限模型,指的是用来表 达用户信息及用户权限信息的数据模型.即能证明"你是谁?"."你能访问多少受保护资源?".为实现一个较为灵活的 用户权限数据模型,通常把用户信息单独用一个实体表示,用户权限信息用两个实体表示. 用户信息用 LoginAccount 表示,最简单的用户信息可能只包含用户名 loginName 及密码 password 两个属性.实际应 用中可能会包含用户是否被禁用

Apache Shiro

Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证.授权.加密.会话管理等功能.认证和授权为权限控制的核心,简单来说,"认证"就是证明你是谁? Web 应用程序一般做法通过表单提交用户名及密码达到认证目的."授权"即是否允许已认证用户访问受保护资源.关于 Shiro 的一系列特征及优点,很多文章已有列举,这里不再逐一赘述,本文重点介绍 Shiro 在 Web Application 中如何实现验证码认证以及如何实现单点登录. 14 评论

Apache Shiro功能强大并且容易集成的开源权限框架

关于 Shiro 的一系列特征及优点,很多文章已有列举,这里不再逐一赘述,本文重点介绍 Shiro 在 http://www.aliyun.com/zixun/aggregation/1.html">Web Application 中如何实现验证码认证以及如何实现单点登录. 用户权限模型 在揭开 Shiro 面纱之前,我们需要认知用户权限模型.本文所提到用户权限模型,指的是用来表达用户信息及用户权限信息的数据模型.即能证明"你是谁?"."你能访问多少受保护资源

Shiro 学习应用(续)

在前面的文章中为大家介绍了 Shrio 的基础概念,可能比较笼统,没有深入到开发过程的一些问题.现在集中在本帖中归纳一下有关问题. FormAuthenticationFilter 表单过滤器 表单过滤器的问题,是本人在实现验证码组件时候遇到的,亦曾经一度让我"抓狂".虽然有便捷的方法实现验证码,例如在控制器中就可以判断验证码逻辑了,但是那有违 Shiro 结构体系的思想:本人也想籍此了解 Shiro 扩展实现方法,--如果都走捷径,那么学习的目的就达不到了.于是,本人就把遇到问题逐一

shiro不执行认证方法 不调用自定义的doGetAuthenticationInfo方法

问题描述 shiro不执行认证方法 不调用自定义的doGetAuthenticationInfo方法 在访问认证路径时 String exceptionClassName = (String) request.getAttribute(""shiroLoginFailure""); 在这直接路过 不去调用自定的realm 解决方案 http://www.oschina.net/question/273295_105031

shiro源码分析(三)授权、认证、缓存的接口设计

前两篇文章主要说的是认证过程,这一篇来分析下授权的过程.还是开涛大神的案例(http://jinnianshilongnian.iteye.com/blog/2020017),如下:  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 public class ShiroTest {       @Test      public void testHelloworld() {