• shiro学习二


    shiro的认证流程:

    示例代码:

    	//realm测试
    	@Test
    	public void testCustomerRealm(){
    		// 创建securityManager工厂,通过ini配置文件(realm配置信息)创建securityManager工厂,在realm中,从数据库查询身份信息
    		Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-realm.ini");
    		
    		//创建SecurityManager
    		org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
    		
    		//将securityManager设置当前的运行环境中
    		SecurityUtils.setSecurityManager(securityManager);
    		
    		//从SecurityUtils里边创建一个subject
    		Subject subject = SecurityUtils.getSubject();
    		
    		//在认证提交前准备token(令牌)
    		//这里的用户名和密码是由用户输入进去的
    		UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "11111");
    
    		try {
    			//执行认证提交,会跳转到自定义的realm中进行认证
    			subject.login(token);
    		} catch (AuthenticationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    		//是否认证通过
    		boolean isAuthenticated =  subject.isAuthenticated();
    		
    		System.out.println("是否认证通过:" + isAuthenticated);
    	}
    

    执行流程:

    1、通过ini配置文件创建securityManager

    2、调用subject.login方法主体提交认证,提交的token

    3、securityManager进行认证,securityManager最终由ModularRealmAuthenticator进行认证。

    4、ModularRealmAuthenticator调用IniRealm(给realm传入token) 去ini配置文件中查询用户信息

    5、默认使用IniRealm(可以自定义配置realm)根据输入的token(UsernamePasswordToken)从 shiro-first.ini查询用户信息,根据账号查询用户信息(账号和密码)

             如果查询到用户信息,就给ModularRealmAuthenticator返回用户信息(账号和密码)

             如果查询不到,就给ModularRealmAuthenticator返回null

    6、ModularRealmAuthenticator接收IniRealm返回Authentication认证信息

             如果返回的认证信息是null,ModularRealmAuthenticator抛出异常(org.apache.shiro.authc.UnknownAccountException

             如果返回的认证信息不是null(说明inirealm找到了用户),对IniRealm返回用户密码 (在ini文件中存在)和 token中的密码 进行对比,如果不一致抛出异常(org.apache.shiro.authc.IncorrectCredentialsException

      注意:

    ModularRealmAuthenticator作用进行认证,需要调用realm查询用户信息(在数据库中存在用户信息)

    ModularRealmAuthenticator进行密码对比(认证过程)

    realm:需要根据token中的身份信息去查询数据库(入门程序使用ini配置文件),如果查到用户返回认证信息,如果查询不到返回null。

     

     

  • 相关阅读:
    自定判断代码的执行环境
    将某个Qt4项目升级到Qt5遇到的问题[转]
    QT 智能提示设置
    c++基础 explicit
    Qt 5.2 Creator 和 vs2012 QT 插件的安装
    servlet乱码问题总结
    c++基础 使用智能指针
    Servlet学习之web服务器Tomcat 详解
    Windows数据类型
    友元类
  • 原文地址:https://www.cnblogs.com/xcggdd/p/7281877.html
Copyright © 2020-2023  润新知