shiro的简单入门使用
这里只是测试登录认证,没有web模块,没有连接数据库,用户密码放在shiro.ini配置中,密码没有加密处理,简单入门。
基于maven
先看目录结构
测试结果
pom.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.xiaostudy</groupId> 8 <artifactId>shiro_test2</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 <packaging>war</packaging> 11 12 <name>shiro_test2 Maven Webapp</name> 13 <!-- FIXME change it to the project's website --> 14 <url>http://www.example.com</url> 15 16 <properties> 17 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 18 <maven.compiler.source>1.7</maven.compiler.source> 19 <maven.compiler.target>1.7</maven.compiler.target> 20 <shiro.version>1.3.0</shiro.version> 21 <quartz.version>2.2.3</quartz.version> 22 <cas.client.version>3.1.9</cas.client.version> 23 <junit.version>4.12</junit.version> 24 <slf4j.version>1.7.7</slf4j.version> 25 <log4j.version>1.2.17</log4j.version> 26 </properties> 27 28 <dependencies> 29 <!-- shiro包开始 --> 30 <dependency> 31 <groupId>org.apache.shiro</groupId> 32 <artifactId>shiro-ehcache</artifactId> 33 <version>${shiro.version}</version> 34 </dependency> 35 <dependency> 36 <groupId>org.apache.shiro</groupId> 37 <artifactId>shiro-core</artifactId> 38 <version>${shiro.version}</version> 39 </dependency> 40 <dependency> 41 <groupId>org.apache.shiro</groupId> 42 <artifactId>shiro-web</artifactId> 43 <version>${shiro.version}</version> 44 </dependency> 45 <dependency> 46 <groupId>org.apache.shiro</groupId> 47 <artifactId>shiro-spring</artifactId> 48 <version>${shiro.version}</version> 49 </dependency> 50 <dependency> 51 <groupId>org.quartz-scheduler</groupId> 52 <artifactId>quartz</artifactId> 53 <version>${quartz.version}</version> 54 <exclusions> 55 <exclusion> 56 <artifactId>c3p0</artifactId> 57 <groupId>c3p0</groupId> 58 </exclusion> 59 </exclusions> 60 </dependency> 61 <dependency> 62 <groupId>org.apache.shiro</groupId> 63 <artifactId>shiro-cas</artifactId> 64 <version>${shiro.version}</version> 65 </dependency> 66 <dependency> 67 <groupId>org.jasig.cas</groupId> 68 <artifactId>cas-client-core</artifactId> 69 <version>${cas.client.version}</version> 70 </dependency> 71 <!-- shiro 包结束 --> 72 73 <!--测试--> 74 <dependency> 75 <groupId>junit</groupId> 76 <artifactId>junit</artifactId> 77 <version>${junit.version}</version> 78 <scope>test</scope> 79 </dependency> 80 81 <!-- 日志文件管理包 --> 82 <dependency> 83 <groupId>log4j</groupId> 84 <artifactId>log4j</artifactId> 85 <version>${log4j.version}</version> 86 </dependency> 87 <dependency> 88 <groupId>org.slf4j</groupId> 89 <artifactId>slf4j-api</artifactId> 90 <version>${slf4j.version}</version> 91 </dependency> 92 <dependency> 93 <groupId>org.slf4j</groupId> 94 <artifactId>slf4j-log4j12</artifactId> 95 <version>${slf4j.version}</version> 96 </dependency> 97 98 <dependency> 99 <groupId>junit</groupId> 100 <artifactId>junit</artifactId> 101 <version>4.11</version> 102 <scope>test</scope> 103 </dependency> 104 105 <dependency> 106 <groupId>org.junit.jupiter</groupId> 107 <artifactId>junit-jupiter-api</artifactId> 108 <version>RELEASE</version> 109 <scope>compile</scope> 110 </dependency> 111 </dependencies> 112 113 <build> 114 <finalName>shiro_test2</finalName> 115 <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> 116 <plugins> 117 <plugin> 118 <artifactId>maven-clean-plugin</artifactId> 119 <version>3.1.0</version> 120 </plugin> 121 <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> 122 <plugin> 123 <artifactId>maven-resources-plugin</artifactId> 124 <version>3.0.2</version> 125 </plugin> 126 <plugin> 127 <artifactId>maven-compiler-plugin</artifactId> 128 <version>3.8.0</version> 129 </plugin> 130 <plugin> 131 <artifactId>maven-surefire-plugin</artifactId> 132 <version>2.22.1</version> 133 </plugin> 134 <plugin> 135 <artifactId>maven-war-plugin</artifactId> 136 <version>3.2.2</version> 137 </plugin> 138 <plugin> 139 <artifactId>maven-install-plugin</artifactId> 140 <version>2.5.2</version> 141 </plugin> 142 <plugin> 143 <artifactId>maven-deploy-plugin</artifactId> 144 <version>2.8.2</version> 145 </plugin> 146 </plugins> 147 </pluginManagement> 148 </build> 149 </project>
shiro.ini
1 #对用户信息进行配置 2 [users] 3 #用户账号和密码 4 zhangsan=123456 5 lisi=654321
log4j.properties
1 log4j.rootLogger=debug, stdout 2 3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m %n
测试代码
1 package com.xiaostudy.test; 2 3 import org.apache.shiro.SecurityUtils; 4 import org.apache.shiro.authc.AuthenticationException; 5 import org.apache.shiro.authc.UsernamePasswordToken; 6 import org.apache.shiro.config.IniSecurityManagerFactory; 7 import org.apache.shiro.mgt.DefaultSecurityManager; 8 import org.apache.shiro.realm.text.IniRealm; 9 import org.apache.shiro.subject.Subject; 10 import org.apache.shiro.util.Factory; 11 import org.junit.jupiter.api.Test; 12 13 /** 14 * Created with IntelliJ IDEA. 15 * @author xiaostudy 16 * Date: 2019/4/29 17 * Time: 10:20 18 * Description: No Description 19 */ 20 public class Test1 { 21 22 // 用户登录和退出 23 @Test 24 public void testLoginAndLogout() { 25 26 DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager(); 27 IniRealm iniRealm = new IniRealm("classpath:shiro.ini"); 28 defaultSecurityManager.setRealm(iniRealm); 29 SecurityUtils.setSecurityManager(defaultSecurityManager); 30 31 // 从SecurityUtils中创建一个subject (org.apache.shiro.subject.Subject) 即主体 32 Subject subject = SecurityUtils.getSubject(); 33 34 // 在认证提交前准备token(令牌) 这里的账号和密码 将来是由用户输入进去的 35 UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "123456"); 36 37 //执行认证提交 38 try { 39 subject.login(token); 40 } catch (AuthenticationException e) { 41 e.printStackTrace(); 42 } 43 44 45 // 是否认证通过 (org.apache.shiro.authc.Authenticator) 即认证器 46 boolean isAuthenticated = subject.isAuthenticated(); 47 System.out.println("是否认证通过:"+isAuthenticated); 48 if(isAuthenticated) { 49 System.out.println("subject:" + subject); 50 System.out.println("用户:" + subject.getPrincipal()); 51 System.out.println("getPrincipal().getClass(): " + subject.getPrincipal().getClass()); 52 } 53 54 //退出操作 55 subject.logout(); 56 57 // 是否认证通过 58 isAuthenticated = subject.isAuthenticated(); 59 System.out.println("是否认证通过:"+isAuthenticated); 60 } 61 }