目录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