首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Apache Shiro 简介(4)

Apache Shiro 简介(4)

运行一个 Grails web 应用程序您可以使用两种基本技巧将 Shiro 应用到 web 应用程序。首先,您可以使用这个 API 来将这里所展示的的代码并入一个基础 servlet。其次,您可以使用 Shiro 自带的 HTTP 过滤器。本例展示了第二种技巧,因为使用过滤器充分利用了内置 web 应用服务器技术以及来自 Shiro 项目的预先编写好的代码。               
本例显示了如何使用 Grails 内的这些过滤器。Grails 是一个项目,旨在让您通过使用一种惯例优先原则(convention-over-configuration)的方式尽快地编写 Groovy web 应用程序。有关 Grails 的更多信息,请参见 。               
对于 Shiro 过滤器,您通常会手动地向 web.xml 文件添加必需的过滤器项。但是,Grails 会在您每次启动应用程序时生成 web.xml 文件,因此不必手动修改 web.xml。               
幸运的是,Grails 提供了插件,可集成到 web.xml 生成过程并会让您也可以参与在 web.xml 文件内编写这些项。如今,Grails 的可用插件很多,包括面向 Shiro 的这个插件。建议尝试使用这个 Shiro Grails 插件,它提供了几个新的脚本,运行这些脚本可以创建不同的域和控制器。               
或者,如果您更愿意自己添加这些项并进行配置,您也可以编写您自己的插件。对于 Grails,编写一个新的插件很容易。要创建能将必需的 Shiro 过滤器项添加到 web.xml 文件的 Grails 插件,可以使用如下命令:               
1
> grails create-plugin ShiroWebXml




创建了这个插件项目后,编辑 ShiroWebXmlPlugin.groovy 文件,并添加如  所示的代码。                
清单 7. 示例插件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class ShiroWebXmlPlugin {
   
   // snipped plugin details...

   def doWithWebDescriptor = { xml ->

       def filterElement = xml.'filter'
       def lastFilter = filterElement[filterElement.size() - 1]

       lastFilter + {
           'filter' {
               'filter-name'("ShiroFilter")
               'filter-class'("org.apache.shiro.web.servlet.IniShiroFilter")
               'init-param' {
                   'param-name'("config")
                   'param-value'("\n#config")
               }
           }
       }

       def filterMappingElement = xml.'filter-mapping'
       def lastFilterMappingElement =
           filterMappingElement[filterMappingElement.size() - 1]

       lastFilterMappingElement + {
           'filter-mapping' {
               'filter-name'("ShiroFilter")
               'url-pattern'("/*")
               }
           }
       }
}




当 Grails 执行这个 web.xml 文件时,此代码就会运行。
在启动这个插件应用程序测试它之前,先将用 Ivy 下载的 Shiro JAR 文件复制到此插件的 lib 文件夹。有了                         JAR 文件后,用以下命令测试此插件是否能正常工作:               
1
grails run-app




如果此插件应用程序成功启动,您可以将它打包以便用在一个示例项目中。要打包这个插件,使用如下命令:               
1
grails package-plugin




可以用如下命令安装这个新的 ShiroWebXmlPlugin:               
1
2
cd myapp
grails install-plugin /path/to/shiro-web-xml-1.0.zip




故障排除如果出现了 UnavailableSecurityManagerException,那么可能是 SecurityManager 未被正确设置。在调用 getSubject() 方法之前,请确保它设在 SecurityUtils                        对象上。               
连接到 LDAP 服务器可能会有些困难。如果得到一个                        javax.naming.CommunicationException,那么请检查此 LDAP 服务器的主机名和端口。即便您没有使用 Apache                        Directory,Apache Directory Studio(可单独安装)也可以帮助您排除连接故障以及名称问题。               
如果您没有使用 Ant Ivy 脚本来初始化您的环境,那么有可能会得到丢失类的错误。即便没有 Apache Commons                         Logging library (commons-logging),这个 INI 文件示例仍可运行,但是运行这个 LDAP                        示例会导致一个异常。这时,可以使用 Apace Commons BeanUtils                来解析这个 INI 文件并设置对象上的值。
返回列表