zoukankan      html  css  js  c++  java
  • Shiro身份认证-JdbcRealm

    Subject 认证主体

    Subject认证主体包含两个信息

    • Principals : 身份,可以是用户名、邮箱、手机号等,用来标识一个登录主体身份。
    • Credentials : 凭证,常见有密码,数字证书。

    Realm

    Realm 意思是域,Shiro 从 Realm 中获取验证数据。

    Realm 有很多种类,常见的有 jdbc realm , jndi realm , text realm

    重点看下jdbc realm的使用。

    • 新建数据库 db_shiro
      • 新建 users 表,表名只能是 users
      • users 中有三个字段,id , userName , password ,名称固定。
    • 新建 jdbc_realm.ini 文件,内容如下:
      [main]
      jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
      dataSource=com.mchange.v2.c3p0.ComboPooledDataSource
      dataSource.driverClass=com.mysql.jdbc.Driver
      dataSource.jdbcUrl=jdbc:mysql://localhost:3306/db_shiro
      dataSource.user=root
      dataSource.password=123qwe
      jdbcRealm.dataSource=$dataSource
      securityManager.realms=$jdbcRealm

      securityManager.realms :设置realms,可以有多个,用逗号隔开

    • 新建测试类,代码如下:
      package com.zhen.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 JdbcRealmTest {
      
          public static void main(String[] args) {
              //读取配置文件,初始化SecurityManager工厂
              Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:jdbc_realm.ini");
              //获取securityManager实例
              SecurityManager securityManager = factory.getInstance();
              //把securityManager绑定到SecurityUtils
              SecurityUtils.setSecurityManager(securityManager);
              //获取当前用户
              Subject currentUser = SecurityUtils.getSubject();
              //创建token令牌,用户名/密码
              UsernamePasswordToken token = new UsernamePasswordToken("zhen", "123");
              try {
                  //身份认证
                  currentUser.login(token);
                  System.out.println("身份认证成功!");
              } catch (AuthenticationException e) {
                  e.printStackTrace();
                  System.out.println("身份认证失败!");
              }
              //退出
              currentUser.logout();
              
          }
      
      }
  • 相关阅读:
    YAML序列样式
    YAML块标量头
    YAML字符流
    YAML语法字符
    YAML流程
    YAML集合和结构
    YAML缩进和分离
    YAML简介
    Git工作流程
    Git使用前配置
  • 原文地址:https://www.cnblogs.com/EnzoDin/p/6595050.html
Copyright © 2011-2022 走看看