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小生店铺

希望店铺的资料能帮助到你!!!

 


原文地址:https://www.cnblogs.com/lirenzhujiu/p/5919151.html