克隆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 配置



results matching ""

    No results matching ""