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

相关文章
|
7月前
|
缓存 算法 安全
快速学会如何使用Shiro
快速学会如何使用Shiro
86 2
|
10月前
|
存储 缓存 安全
Shiro学习之Shiro简介
Shiro学习之Shiro简介
73 0
|
10月前
|
Java API 数据库
Shiro学习之Shiro基本使用(1)
Shiro学习之Shiro基本使用(1)
63 0
|
10月前
|
Java 数据库 数据安全/隐私保护
Shiro学习之Shiro基本使用(2)
Shiro学习之Shiro基本使用(2)
41 0
|
Java 数据库 数据安全/隐私保护
用shiro框架实现注册登陆,让你快速理解shiro用法
用shiro框架实现注册登陆,让你快速理解shiro用法
449 0
用shiro框架实现注册登陆,让你快速理解shiro用法
|
安全 数据安全/隐私保护
【Shiro】4、Shiro实现记住登录功能
用户每次在登录系统时需要重新输入账户、密码、验证码等信息,非常麻烦,于是要求加一个记住登录的功能,这对于 Shiro 来说是非常简单,下面就让我们一起来实现记住登录功能
139 0
【Shiro】4、Shiro实现记住登录功能
|
缓存 前端开发 程序员
Shiro实现多realm方案
前后端分离的背景下,在认证的实现中主要是两方面的内容,一个是用户登录获取到token,二是从请求头中拿到token并检验token的有效性和设置缓存。
Shiro实现多realm方案
|
SQL 安全 Java
Shiro - 基础篇(下)
Shiro - 基础篇(下)
97 0
Shiro - 基础篇(下)
|
缓存 Java 数据库
Shiro - 基础篇(上)
Shiro - 基础篇(上)
119 0
Shiro - 基础篇(上)
|
缓存 安全 Java
Shiro(一):shiro简介
Shiro(一):shiro简介
181 0
Shiro(一):shiro简介