1. 程式人生 > >一、shiro初始學習,使用ini完成認證

一、shiro初始學習,使用ini完成認證

1、建立專案,pom.xml中<dependencies></dependencies>中引入包


    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-core</artifactId>
      <version>1.2.1</version>
    </dependency>

resources資原始檔下建立shiro.ini,新增內容

[users]
zhangsan=666
lisi=888

 建立測試類ShiroTest

import org.apache.shiro.SecurityUtils;
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;
import org.junit.Test;

/**
 * 測試shiro認證
 */
public class ShiroTest
{
    /**
     * Rigorous Test :-)
     */
    @Test
    public void testLogin() throws Exception{
        //1、建立securityManager工廠物件:載入配置檔案,建立工廠物件
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
        // 2、通過工廠物件,建立SecurityManager物件  單例模式,有一個private的建構函式,使得不能用new來例項化物件,只能呼叫getInstance()保證了每次呼叫都返回相同的物件。
        SecurityManager securityManager = factory.getInstance();
        // 3、將securityManager繫結到當前執行環境中,讓系統隨時隨地可以訪問securityManager物件
        SecurityUtils.setSecurityManager(securityManager);
        // 4、建立當前登入的主體,注意:此時主體沒有經過認證
        Subject subject = SecurityUtils.getSubject();
        // 5、繫結主體登入的身份憑證,即賬號密碼
        // 引數1表示將要登入的使用者名稱,引數2表示登入使用者的密碼
        // 賬號密碼錯誤是分別出現不同的異常錯誤找不到賬戶異常/賬號正常,密碼錯誤異常,根據異常錯誤可以向前臺反饋不同的資料資訊,用try catch
        UsernamePasswordToken token = new UsernamePasswordToken("zhangsan","666");
        // 6、主題登入
        try {
            subject.login(token);
            // 操作成功操作
        } catch (Exception e) {
            // 登入失敗操作
        }
        // 7、判斷登入是否成功
        System.out.println("登入是否成功:" + subject.isAuthenticated());
        // 8、登出登入
        subject.logout();
        System.out.println("登入是否成功:" + subject.isAuthenticated());
    }
}