shiro教程2(自定义Realm)

简介: shiro教程2(自定义Realm)


image.png

/**
 * 自定义的Realm
 * @author dengp
 *
 */
public class MyRealm extends AuthorizingRealm{
  /**
   * 认证方法
   * @param token 
   *  就是我们在测试代码中 定义的UsernamePasswordToken对象
   *  有我们保存的需要验证的账号密码信息
   */
  @Override
  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    // 获取账号信息
    String principal = (String) token.getPrincipal();
    // 正常逻辑此处应该根据账号去数据库中查询,此处我们默认账号为 root 密码123456
    // 验证账号
    if(!"root".equals(principal)){
      // 账号错误
      return null;
    }
    String pwd = "123456";
    // 验证密码
    AuthenticationInfo info = new SimpleAuthenticationInfo(principal, pwd,"myrealm");
    return info;
  }
  /**
   * 授权方法
   */
  @Override
  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
    // TODO Auto-generated method stub
    return null;
  }
}

image.png

[main]
#自定义 realm
customRealm=com.dpb.realm.MyRealm
#将realm设置到securityManager
securityManager.realms=$customRealm

image.png

@Test
public void test() {
  // 1.获取SecurityManager工厂对象
  Factory<SecurityManager> factory = 
      new IniSecurityManagerFactory("classpath:shiro.ini");
  // 2.通过Factory对象获取SecurityManager对象
  SecurityManager securityManager = factory.getInstance();
  // 3.将SecurityManager对象添加到当前运行环境中
  SecurityUtils.setSecurityManager(securityManager);
  // 4.获取Subject对象
  Subject subject = SecurityUtils.getSubject();
  AuthenticationToken token = new UsernamePasswordToken("root1", "12345");
  // 登录操作
  try {
    subject.login(token);
  } catch (UnknownAccountException e) {
    System.out.println("账号出错...");
  } catch(IncorrectCredentialsException e){
    System.out.println("密码出错...");
  }
  // 获取登录的状态
  System.out.println(subject.isAuthenticated());
}

image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

相关文章
|
8月前
|
数据库 数据安全/隐私保护
Shiro【自定义Realm 、多Realm认证 、多Realm认证策略、异常处理】(四)-全面详解(学习总结---从入门到深化)
Shiro【自定义Realm 、多Realm认证 、多Realm认证策略、异常处理】(四)-全面详解(学习总结---从入门到深化)
150 1
|
8月前
|
数据库 数据安全/隐私保护
Shiro【自定义Realm 、多Realm认证 、多Realm认证策略、异常处理】(二)-全面详解(学习总结---从入门到深化)
Shiro【自定义Realm 、多Realm认证 、多Realm认证策略、异常处理】(二)-全面详解(学习总结---从入门到深化)
466 0
|
Java 数据库 数据安全/隐私保护
用shiro框架实现注册登陆,让你快速理解shiro用法
用shiro框架实现注册登陆,让你快速理解shiro用法
508 0
用shiro框架实现注册登陆,让你快速理解shiro用法
|
安全 Java 数据库连接
Shiro 中的 Realm
Shiro 中的 Realm
130 0
|
缓存 安全 Apache
2021年你还不会Shiro?----3.分析身份认证源码实现自定义Realm
我们已经知道无论我们是认证还是授权,数据的获取都是来源于Realm,Realm就相当于我们的datasource,在上一篇中我们使用的是用IniRealm来加载我们的配置文件shiro.ini,同时我们也说了ini只是临时解决方案,在实际的开发中是不可能把用户信息和权限信息放在ini文件中的,都是来源于数据库,那么系统提供的IniRealm就不能满足我们的需要了,我们就需要自定义Realm来实现真正的场景,事实上ini文件也只是apache为我们提供学习使用的策略,下面我们就来看下怎么自己定义一个Realm。
127 0
2021年你还不会Shiro?----3.分析身份认证源码实现自定义Realm
|
安全 数据安全/隐私保护
【Shiro】4、Shiro实现记住登录功能
用户每次在登录系统时需要重新输入账户、密码、验证码等信息,非常麻烦,于是要求加一个记住登录的功能,这对于 Shiro 来说是非常简单,下面就让我们一起来实现记住登录功能
183 0
【Shiro】4、Shiro实现记住登录功能
|
缓存 前端开发 程序员
Shiro实现多realm方案
前后端分离的背景下,在认证的实现中主要是两方面的内容,一个是用户登录获取到token,二是从请求头中拿到token并检验token的有效性和设置缓存。
Shiro实现多realm方案
|
SQL 安全 Java
Shiro - 基础篇(下)
Shiro - 基础篇(下)
125 0
Shiro - 基础篇(下)
|
缓存 Java 数据库
Shiro - 基础篇(上)
Shiro - 基础篇(上)
159 0
Shiro - 基础篇(上)
|
数据库
【Shiro 系列 05】Shiro 中多 Realm 的认证策略问题
上篇文章和小伙伴们分享了 JdbcRealm,本文我想和小伙伴们聊聊多 Realm 的认证策略问题。
【Shiro 系列 05】Shiro 中多 Realm 的认证策略问题