最近跟着視頻學shiro,作為一個小白,剛開始就遇到了一個折騰半天都沒解決的報錯: org.apache.shiro.config.ConfigurationException: java.io.IOException: Resource [classpath:shiro-first.ini] could not be found.
大意上就是ini配置文件沒有找到,這是代碼:
package cn.itcast.shiro.authentication; 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; import org.junit.Test; public class AuthenticationTest { // 用戶登陸和退出 @Test public void testLoginAndLogout() { // 創建securityManager工廠,通過ini配置文件創建securityManager工廠 //1.創建一個安全管理器的工廠 Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-first.ini"); //2.在工廠中獲取安全管理器 SecurityManager securityManager = factory.getInstance(); //3.將securityManager綁定到運行環境 SecurityUtils.setSecurityManager(securityManager); //4.獲取Subject對象(將要登錄的用戶) Subject subject = SecurityUtils.getSubject(); //5.獲取要登錄用戶的token,客戶端傳遞過來的用戶名和密碼 String username = "zhangsan",password="123456"; UsernamePasswordToken token = new UsernamePasswordToken(username,password); try{ subject.login(token); }catch (AuthenticationException e){ e.printStackTrace(); } boolean isAuthenticated = subject.isAuthenticated(); System.out.println("是否認證通過:"+isAuthenticated); //執行退出操作 subject.logout(); System.out.println("執行推出操作"); System.out.println("是否認證通過:"+subject.isAuthenticated()); } }
文件目錄
config文件夾沒有設置成資源文件夾,接下來看一下在idea里如何設置成資源文件夾吧
右鍵config文件夾,找到Mark Directory as 單擊Resources Root設置成資源文件夾,之后你的.ini配置文件就可以被IniSecurityManagerFactory訪問到,最后看一下設置完成資源文件夾的控制台輸出信息吧。
另一個因素(本人遇到的原因):
因為我的項目是maven項目,pom.xml有這樣的設置:
<resources> <!--編譯之后包含xml--> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.org</include> <include>**/*.txt</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.org</include> <include>**/*.txt</include> </includes> <filtering>true</filtering> </resource> </resources>
現在知道了吧: 添加了ini文件后,重啟IDE即可 (這樣就可以資源目錄文件編譯的時候復制到classpath了)
<include>**/*.ini</include>
轉 : https://blog.csdn.net/a1106103430/article/details/86519355