shiro认证
2016-05-22 10:27
363 查看
1 shiro认证
1.1 认证流程
分享牛系列,分享牛专栏,分享牛。shiro认证分析,shiro认证原理分析。1.2 入门程序(用户登陆和退出)
1.2.1 创建java工程
jdk版本:1.7.0_72eclipse: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
相关文章推荐
- 如何维护Http请求的状态
- 【c程序设计语言(第二版)学习】20160326
- Ubuntu 12.04版本下安装交叉编译器arm-linux-gcc4.3.2
- centos6.5初步安装tomcat8步骤
- c程序在虚拟内存中的地址顺序
- 指针、数组、指针算术
- Json格式与java对象之间的转换
- HTML5 Web SQL 的增删改查操作
- Objective-C ---点语法 (梳理整理)
- 第十二周学习进度
- 动态规划9之1014
- 软考二进宫-这次的软考题有些绕
- Android课程学习:Walker(登录界面)
- OBIEE部署RPD
- L1-015. 跟奥巴马一起画方块(C++)
- bzoj 1005: [HNOI2008]明明的烦恼(组合数学 purfer sequence)
- 推荐系统算法总结
- AppDelegate中几个常用的回调调用时机
- 欧拉 函数
- FileStream类的一些用法