Shiro使用指南(二)
2015-11-27 14:23
399 查看
1、准备工作
为了测试教程,我们先准备好以下工具。Eclipse
Apache Maven2.2.1 或 更高的版本
java 1.5 或 更高的版本
本人的系统是windows 7, 在Dos输入mvn -version来测试mvn是否安装,并且已配置到环境变量。如图:
如你所见,windows 7系统, Java 1.7, Apache Maven 3.2.1。
2、在Eclipse建立一个Maven项目,并配置pom.xml文件
在Eclipse建立Maven项目就不详解了,项目结果如下:Tutorial.java文件的内容如下:
package com.dsc; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Tutorial { private static final transient Logger log = LoggerFactory.getLogger(Tutorial.class); public static void main(String[] args) { log.info("我的第一个Apache Shiro应用程序"); System.exit(0); } }
pom.xml文件配置如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.apache.shiro.tutorials</groupId> <artifactId>shiro-tutorial</artifactId> <version>0.0.1-SNAPSHOT</version> <name>First Apache Shiro Application</name> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- shiro核心类库 --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.1.0</version> </dependency> <!-- Shiro使用SLF4J来记录日志. 去http://www.slf4j.org查看更多的信息. --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.6.1</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <!-- compiler插件, 设定JDK版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.5</source> <target>1.5</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <!-- This plugin is only to test run our little application. It is not needed in most Shiro-enabled applications: --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.3.2</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <classpathScope>test</classpathScope> <mainClass>com.dsc.Tutorial</mainClass> </configuration> </plugin> </plugins> </build> </project>
在Shiro-tutorial项目执行 compile exec:java。如下图:
在Console输出:
[INFO] Scanning for projects... ...... [WARNING] Warning: killAfter is now deprecated. Do you need it ? Please comment on MEXEC-6. <span style="color:#FF0000;">0 [com.dsc.Tutorial.main()] INFO com.dsc.Tutorial - 我的第一个Apache Shiro应用程序</span>从控制台输出的结果看来,我们的应用程序成功运行。接下来我们往应用程序加入更多的代码。
从Shiro的介绍(一)了解,Shiro提供了一个默认“公共性”的基于文本的INI配置的解决方案。和XML文件相比,INI文件易于阅读,易于使用,并且只需要很少的依赖。因此,我们在这个简单的应用程序使用INI文件来配置Shiro SecurityManager。
在src/main/resources中建立Shiro.ini文件。文件内容如下:
# ----------------------------------------------------------------------------- # 用户名 = 密码, 角色1, ..., 角色N # username = password, role1, role2, ..., roleN # ----------------------------------------------------------------------------- [users] root = secret, admin jack = 123456, manager, employees # ----------------------------------------------------------------------------- # 角色 = 权限1, ..., 权限N # roleName = perm1, perm2, ..., permN # ----------------------------------------------------------------------------- [roles] admin = * manager = custom:* employees = order:list:create接着我们修改Tutorial.java的内容:
package com.dsc; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.IncorrectCredentialsException; import org.apache.shiro.authc.LockedAccountException; import org.apache.shiro.authc.UnknownAccountException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.Factory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Tutorial { private static final transient Logger log = LoggerFactory.getLogger(Tutorial.class); public static void main(String[] args) { log.info("我的第一个Apache Shiro应用程序"); Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); SecurityManager securityManager = factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); Subject currentUser = SecurityUtils.getSubject(); Session session = currentUser.getSession(); session.setAttribute("someKey", "aValue"); String value = (String)session.getAttribute("someKey"); if ("aValue".equals(value)) { log.info("session获取正确的值[" + value + "]!"); } if (!currentUser.isAuthenticated()) { UsernamePasswordToken token = new UsernamePasswordToken("jack", "123456"); token.setRememberMe(false); try { currentUser.login(token); } catch (UnknownAccountException uae ) { log.info("[" + token.getPrincipal()+"]账号不存在"); return ; } catch (IncorrectCredentialsException ice ) { log.info("[" + token.getPrincipal() + "]账号的密码不是" + token.getCredentials()); return ; } catch (LockedAccountException lae ) { log.info("[" + token.getPrincipal()+"]账号已经被锁定"); return ; } catch (AuthenticationException ae ) { log.info("账号/密码错误"); 4000 return ; } } log.info("[" + currentUser.getPrincipal() + "]账号登录成功"); if (currentUser.hasRole("manager")) { log.info("系统账号拥有角色[manager]"); } else { log.info("系统账号没有角色[manager]"); } if (currentUser.isPermitted("custom:weild")) { log.info("系统账号拥有权限[custom]"); } else { log.info("系统账号没有权限[custom]"); } if (currentUser.isPermitted("order:list:create")) { log.info("系统账号拥有权限[employees]"); } else { log.info("系统账号没有权限[employees]"); } // 登出 currentUser.logout(); System.exit(0); } }再次执行 compile exec:java,则Console输出:
[INFO] Scanning for projects... ... 0 [com.dsc.Tutorial.main()] INFO com.dsc.Tutorial - 我的第一个Apache Shiro应用程序 73 [com.dsc.Tutorial.main()] INFO org.apache.shiro.session.mgt.AbstractValidatingSessionManager - Enabling session validation scheduler... 109 [com.dsc.Tutorial.main()] INFO com.dsc.Tutorial - session获取正确的值[aValue]! 110 [com.dsc.Tutorial.main()] INFO com.dsc.Tutorial - [jack]账号登录成功 110 [com.dsc.Tutorial.main()] INFO com.dsc.Tutorial - 系统账号拥有角色[manager] 110 [com.dsc.Tutorial.main()] INFO com.dsc.Tutorial - 系统账号拥有权限[custom] 110 [com.dsc.Tutorial.main()] INFO com.dsc.Tutorial - 系统账号拥有权限[employees]
如你所见,应用程序执行很成功。从shiro.ini文件来看,结果一致。
相关文章推荐
- Linux下如何指定某一类型程序用特定程序打开(通过binfmt_misc)
- HttpClient通过HttpPost传递参数
- 一些有趣的python开源项目
- Alcatel-Lucent 7750 运营商认证设备在线用户数OID
- 应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行sxstrace.exe工具。解决方法
- Android 键盘使用三(显示、隐藏、切换、数字键盘、英文数字键盘)
- activiti怎么把业务对象和流程规则联系起来
- [Leetcode] Longest Palindromic Substring
- C#数据结构之双向链表(DbLinkList)实例详解
- soapUI 环境管理
- 修改UISearchBar背景颜色
- 【xv6学习之Lec2】 PC hardware and x86 programming slides
- PTA数据结构与算法题目集(中文) 函数题 (1)
- 【非原创】PHPMywind调用
- 程序员面试题:问谁养蛇?
- Hbase 的基础操作
- 初学移动专题
- 为什么在Spring的配置里,最好不要配置xsd文件的版本号
- NodeJs处理Get请求和Post请求
- 编写一个简单的SHELL脚本