第二章:Shiro的HelloWorld
工程结构:
一、新建Maven工程,工程名如下:
<groupId>com.java1234.shiro</groupId> <artifactId>Shiro01</artifactId> <version>0.0.1-SNAPSHOT</version>
二、导入jar包
修改pom.xml:
1 <dependencies> 2 <!-- shiro核心包 --> 3 <dependency> 4 <groupId>org.apache.shiro</groupId> 5 <artifactId>shiro-core</artifactId> 6 <version>1.2.4</version> 7 </dependency> 8 9 <!-- slf4j日志包 --> 10 <dependency> 11 <groupId>org.slf4j</groupId> 12 <artifactId>slf4j-log4j12</artifactId> 13 <version>1.7.12</version> 14 </dependency> 15</dependencies>
三、为了模拟操作数据库,这里新建一个.ini文件,用于做静态数据的数据库取数模拟操作,实际开发中应该从数据库中取数
在src/main/resources下创建shiro.ini:[users]是shiro语法的固定写法,表示用户, 定义两个用户
1 [users] 2 java1234 = 123456 3 jack = 123
四、在com.java1234.shiro下创建HelloWorld.java
package com.java1234.shiro; 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; public class HelloWorld { public static void main(String[] args) { // 读取shiro.ini文件, 获取SecurityManager工厂 Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); // 获取securityManager实例 SecurityManager securityManager = factory.getInstance(); // 把securityManager绑定到SecurityUtils进行预处理 SecurityUtils.setSecurityManager(securityManager); // 获取当前用户 Subject currentUsers = SecurityUtils.getSubject(); // 创建用户名/密码的令牌Token UsernamePasswordToken token = new UsernamePasswordToken("java1234", "123456"); // 身份认证, 通过源码知道这里有可能抛出异常 try { currentUsers.login(token); System.out.println("身份认证成功!"); } catch (AuthenticationException e) { e.printStackTrace(); System.out.println("身份认证失败!"); } // 退出 currentUsers.logout(); } }
五、测试
后台打印:身份认证成功!
修改:
// 创建用户名/密码的令牌Token UsernamePasswordToken token = new UsernamePasswordToken("java1234", "1234");
再测试, 后台打印:
org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - java1234,
rememberMe=false] did not match the expected credentials. at org.apache.shiro.realm.AuthenticatingRealm.assertCredentialsMatch(AuthenticatingRealm.java:600) at org.apache.shiro.realm.AuthenticatingRealm.getAuthenticationInfo(AuthenticatingRealm.java:578) at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doSingleRealmAuthentication(ModularRealmAuthenticator.java:180) at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:267) at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198) at org.apache.shiro.mgt.AuthenticatingSecurityManager.authenticate(AuthenticatingSecurityManager.java:106) at org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:270) at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:256) at com.java1234.shiro.HelloWorld.main(HelloWorld.java:30) 身份认证失败!
身份不匹配, 登录失败!