您的位置:首页 > 其它

shiro认证

2016-05-22 10:27 363 查看

1 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: