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();
            
        }
    
    }

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM