第二章: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) 身份认证失败!

身份不匹配, 登录失败!

 

posted @ 2017-05-05 23:37  半生戎马,共话桑麻、  阅读(92)  评论(0)    收藏  举报
levels of contents