shiro认证入门程序
shiro-first.ini
通过此配置文件创建securityManager工厂。
需要修改eclipse的ini的编辑器:
入门程序代码
Java代码
- // 用户登陆和退出
- @Test
- public void testLoginAndLogout() {
-
- // 创建securityManager工厂,通过ini配置文件创建securityManager工厂
- Factory<SecurityManager> factory = new IniSecurityManagerFactory(
- "classpath:shiro-first.ini");
-
- //创建SecurityManager
- SecurityManager securityManager = factory.getInstance();
-
- //将securityManager设置当前的运行环境中
- SecurityUtils.setSecurityManager(securityManager);
-
- //从SecurityUtils里边创建一个subject
- Subject subject = SecurityUtils.getSubject();
-
- //在认证提交前准备token(令牌)
- UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "111111");
-
- 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);
-
-
-
- }
// 用户登陆和退出 @Test public void testLoginAndLogout() { // 创建securityManager工厂,通过ini配置文件创建securityManager工厂 Factory<SecurityManager> factory = new IniSecurityManagerFactory( "classpath:shiro-first.ini"); //创建SecurityManager SecurityManager securityManager = factory.getInstance(); //将securityManager设置当前的运行环境中 SecurityUtils.setSecurityManager(securityManager); //从SecurityUtils里边创建一个subject Subject subject = SecurityUtils.getSubject(); //在认证提交前准备token(令牌) UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "111111"); 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); }
执行流程
Java代码
- 1、通过ini配置文件创建securityManager
- 2、调用subject.login方法主体提交认证,提交的token
- 3、securityManager进行认证,securityManager最终由ModularRealmAuthenticator进行认证。
- 4、ModularRealmAuthenticator调用IniRealm(给realm传入token) 去ini配置文件中查询用户信息
- 5、IniRealm根据输入的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)
1、通过ini配置文件创建securityManager2、调用subject.login方法主体提交认证,提交的token3、securityManager进行认证,securityManager最终由ModularRealmAuthenticator进行认证。4、ModularRealmAuthenticator调用IniRealm(给realm传入token) 去ini配置文件中查询用户信息5、IniRealm根据输入的token(UsernamePasswordToken)从 shiro-first.ini查询用户信息,根据账号查询用户信息(账号和密码) 如果查询到用户信息,就给ModularRealmAuthenticator返回用户信息(账号和密码) 如果查询不到,就给ModularRealmAuthenticator返回null6、ModularRealmAuthenticator接收IniRealm返回Authentication认证信息 如果返回的认证信息是null,ModularRealmAuthenticator抛出异常(org.apache.shiro.authc.UnknownAccountException) 如果返回的认证信息不是null(说明inirealm找到了用户),对IniRealm返回用户密码 (在ini文件中存在)和 token中的密码 进行对比,如果不一致抛出异常(org.apache.shiro.authc.IncorrectCredentialsException)
小结
Java代码
- ModularRealmAuthenticator作用进行认证,需要调用realm查询用户信息(在数据库中存在用户信息)
- ModularRealmAuthenticator进行密码对比(认证过程)。
-
- realm:需要根据token中的身份信息去查询数据库(入门程序使用ini配置文件),如果查到用户返回认证信息,如果查询不到返回null。
ModularRealmAuthenticator作用进行认证,需要调用realm查询用户信息(在数据库中存在用户信息)ModularRealmAuthenticator进行密码对比(认证过程)。 realm:需要根据token中的身份信息去查询数据库(入门程序使用ini配置文件),如果查到用户返回认证信息,如果查询不到返回null。
java企业级通用权限安全框架源码 SpringMVC mybatis or hibernate+ehcache shiro druid bootstrap HTML5
【java框架源码下载】
原标题:跟我学习shiro权限框架(第 二天)
关键词:Shiro