目錄java
st=>start: Start e=>end: End op1=>operation: 構造SecurityManager環境 op2=>operation: Subject.login()提交認證 op3=>operation: SecurityManager.login()執行認證 op4=>operation: Authenticator執行認證 op5=>operation: Realm根據身份獲取認證信息 st->op1->op2->op3->op4->op5->e
目錄
apache
pom.xml
<dependencies> <!-- shiro --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.4</version> </dependency> <!--日誌問題的解決--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.15</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies></pre>
AuthenticationTest.java
app
//建立SecurityManager環境 //1.建立SecurityManager工廠 Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-config.ini"); //2.經過工廠得到實例 SecurityManager securityManager = factory.getInstance(); //將SecurityManager設置到運行環境中 SecurityUtils.setSecurityManager(securityManager); //Subject.login()提交認證 //1.建立Subject對象 Subject subject = SecurityUtils.getSubject(); //2.封裝口令對象 AuthenticationToken token = new UsernamePasswordToken("kiwi", "123456"); //3.提交認證 try { subject.login(token); } catch (AuthenticationException e) { e.printStackTrace(); } System.out.println("認證:" + subject.isAuthenticated());
shiro-config.ini
spa
[users] kiwi = 123456
log4j.properties
日誌
log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
1.剛開始運行總是報日誌的問題
解決:引入slf4j-log4j12的jar包,具體參考關於SLF4J: Failed to load class的問題及解決
2.爲何要用ini文件而不用properties
由於ini文件能夠分片,好比[users]就是劃一片範圍用於users信息code