一、shiro初始學習,使用ini完成認證
阿新 • • 發佈:2019-01-07
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()); } }