Shiro进行简单的身份验证(二)
一个Realm数据源:
shiro.ini:
[users]
wp=123456
main方法执行认证:
package com.wp.shiro; 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; public class HelloWord { public static void main(String[] args) { // 读取配置文件,初始化SecurityManager工厂,SecurityManager类似SpringMVC中的DispatcherServlet或者Struts2中的FilterDispatcher Factory<SecurityManager> factory = new IniSecurityManagerFactory( "classpath:shiro.ini"); // 获取SecurityManager实例 SecurityManager securityManager = factory.getInstance(); // 把securityManager实例绑定到SecurityUtils SecurityUtils.setSecurityManager(securityManager); // 得到当前执行的用户 Subject currentUser = SecurityUtils.getSubject(); // 创建token令牌,用户名和密码 UsernamePasswordToken token = new UsernamePasswordToken("wp", "123456"); try { // 身份认证 currentUser.login(token); System.out.println("身份认证成功!"); } catch (AuthenticationException e) {// Authentication为认证器,这里之认证异常 e.printStackTrace(); System.out.println("身份认证失败!"); } // 退出 currentUser.logout(); } }
AuthenticationException为认证异常:DisabledAccountException( 禁用的 帐号) 、 LockedAccountException( 锁定的 帐号) 、
UnknownAccountException(错误的帐号) 、 ExcessiveAttemptsException(登录失败次数过
多) 、 IncorrectCredentialsException (错误的凭证) 、 ExpiredCredentialsException(过期的
凭证)
认证的流程:
用户进行login时,会交给securityManage进行委托,在此之前先通过securityUtils.serSecurityManager进行设置;Security进行身份验证,它会交给认证器Authenticator进行认证;Authentication又交给AuthenticationStrategy去Realm中验证,同时Authenticator
把相应的token传入Realm,从Realm获取身份信息,如果没有或抛出异常,则身份认证失败。
Java小生店铺:
Pc端:http://shop125970977.taobao.com/index.htm
手机端:搜索 java小生店铺
希望店铺的资料能帮助到你!!!