克隆tutorial项目
$ git clone https://github.com/lhazlewood/apache-shiro-tutorial-webapp.git
$ cd apache-shiro-tutorial-webapp
项目结构
apache-shiro-tutorial-webapp/
|-- src/
| |-- main/
| |-- resources/
| |-- logback.xml
| |-- webapp/
| |-- WEB-INF/
| |-- web.xml
| |-- home.jsp
| |-- include.jsp
| |-- index.jsp
|-- .gitignore
|-- .travis.yml
|-- LICENSE
|-- README.md
|-- pom.xml
项目目录/文件 | 说明 |
---|---|
pom.xml | maven项目构建文件 |
README.md | |
LICENSE | Apache 2.0 license |
.travis.yml | Travis CI配置文件(持续集成) |
.gitignore | |
src/main/resources/logback.xml | Logback配置文件 |
src/main/webapp/WEB-INF/web.xml | |
src/main/webapp/include.jsp | |
src/main/webapp/home.jsp | |
src/main/webapp/index.jsp |
运行webapp
$ mvn jetty:run
访问应用http://localhost:8080/
,会看到“Hello,World!”问候语。
Enable Shiro
master分支是简单、通用的web应用模板,现在为其添加Shiro
$ git checkout step1
通过上面命令,将追踪远程库的step1分支,并在本地建立step1分支。
相对于master分支,step1分支的变化是:
增加
src/main/webapp/WEB-INF/shiro.ini
修改
src/main/webapp/WEB-INF/web.xml
Shiro可以在web应用中以多种方式配置,这依赖于不同的web框架类型,比如可以通过Spring、Guice、Tapestry等配置Shiro。
为保持简单,此处使用Shiro的默认配置,也就是ini文件配置。
[main]
cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
securityManager.cacheManager = $cacheManager
cacheManager(缓存管理器),此处使用MemoryContrainedCacheManager
,它只对单例的JVM应用适用。
当配置完毕shiro.ini之后,需要将其加载才能启动Shiro环境,并让web应用访问该环境,因此需要修改web.xml文件
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<listener>
声明定义ServletContextListener
,它会在web应用启动时,同时启动Shiro环境。默认,listener会寻找WEB-INF/shiro.ini
。
<filter>
声明定义ShiroFilter
,从而在请求web应用时完成必要的身份验证和访问控制。
<filter-mapping>
声明确保请求的各种类型都可以被ShiroFilter
管理。
运行应用
$ mvn jetty:run
连接User Store
检出step2分支
git checkout step2
尽管已经将Shiro集成到web应用,但是并没有告诉shiro做什么;实际上,在这之前,需要先定义用户库。
用户库有多种形式,可以是MySQL,MongoDB,LDAP,AD,或者是简单的文件。
最简单的一种方式是使用Stormpath。Stormpath是托管的用户管理服务。stormpath提供的功能包括:
管理Applications,Directories,Accounts,Groups的接口
用户密码的安全存储机制
安全流程,如邮件验证,密码重置等
修改src/main/webapp/WEB-INF/shiro.ini
配置