Apache Shiro Web应用整合-配置

博客分类:

Shiro

将Shiro  集成到任何 Web  应用程序的最简单的方法是在 web.xml  中配置 ContextListener  和 Filter ,来使 Shiro 知道如何读取 Shiro 的 INI  配置文件。

注意:Spring  框架用户将不执行此设置。如果你使用 Spring ,你将要阅读关于 Spring  特定的 Web  配置。

Web.xml

Shiro 1.2 and later

在Shiro 1.2  及以后版本,标准的 Web  应用程序通过添加下面的 XML  块到 web.xml  来初始化 Shiro :


<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>

</filter-mapping>

这是假设Shiro INI  配置文件在以下两个位置任意一个,并使用最先发现的那个:

1. /WEB-INF/shiro.ini

2. 在 classpath  根目录下 shiro.ini  文件

下面是上述配置所做的事情:

l  EnvironmentLoaderListener 初始化一个 Shiro WebEnvironment  实例(其中包含 Shiro  需要的一切操作,包括 SecurityManager ),使得它在 ServletContext  中能够被访问。如果你需要在任何时候获得 WebEnvironment  实例,你可以调用 WebUtils.getRequiredWebEnvironment ( ServletContext )。

l  ShiroFilter 将使用此 WebEnvironment  对任何过滤的请求执行所有必要的安全操作。

l  最后,filter-mapping  的定义确保了所有的请求被 ShiroFilter  过滤,建议大多数 Web  应用程序使用以确保任何请求是安全的。

默认情况下,EnvironmentLoaderListener  将创建一个 IniWebEnvironment  实例,读取 Shiro  基于 INI  文件的配置。如果你愿意,你可以在 web.xml  中指定一个自定义的 ServletContext context-param :


<context-param>

<param-name>shiroEnvironmentClass</param-name>

<param-value>com.foo.bar.shiro.MyWebEnvironment</param-value>

</context-param>

IniWebEnvironment 将会去读取和加载 INI  配置文件。默认情况下,这个类会自动地在下面两个位置寻找 Shiro.ini  配置(按顺序)。

1. /WEB-INF/shiro.ini

2. classpath:shiro.ini

它将使用最先发现的那个。

然而,如果你想把你的配置放在另一位置,你可以在web.xml  中用 contex-param  指定该位置。


<context-param>

<param-name>shiroConfigLocations</param-name>

<param-value>YOUR_RESOURCE_LOCATION_HERE</param-value>

</context-param>

默认情况下,在ServletContext.getResource  方法定义的规则下, param-value  是可以被解析的。例如, /WEB-INF/some/path/shiro.ini 。

但你也可以指定具体的文件系统,如classpath  或 URL  位置,通过使用 Shiro  支持的合适的资源前缀,例如:

l  file://home/foobar/myapp/shiro.ini

l  classpath:com/foo/bar/shiro.ini

url:http://confighost.mycompany.com/myapp/shiro.ini

Shiro 1.1 and earlier

在Web  应用程序中使用 Shiro 1.1  或更早版本的最简单的方法是定义 IniShiroFilter  并指定一个 filter-mapping:


<filter>

<filter-name>ShiroFilter</filter-name>

<filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>

</filter>

<!-- Make sure any request you want accessible to Shiro is filtered. /* catches all -->

<!-- requests. Usually this filter mapping is defined first (before all others) to

-->

<!-- ensure that Shiro works in subsequent filters in the filter chain:

-->

<filter-mapping>

<filter-name>ShiroFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

如果你不想将你的INI  配置放在 /WEB-INF/shiro.ini  或 classpath:shiro.ini ,你可以指定一个自定义的资源位置。添加一个 configPath  的 init-param ,并指定资源位置。


<filter>

<filter-name>ShiroFilter</filter-name>

<filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>

<init-param>

<param-name>configPath</param-name>

<param-value>/WEB-INF/anotherFile.ini</param-value>

<init-param>

</filter>

最后,也可以将你的INI  配置嵌入到 web.xml  中而不使用一个独立的 INI  文件。你可以通过使用 init-param  做到这点,而不是 configPath :


<filter>

<filter-name>ShiroFilter</filter-name>

<filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>

<init-param>

<param-name>config</param-name>

<param-value>

# INI Config Here

</param-value>

</init-param>

</filter>

...

内嵌配置对于小型的或简单的应用程序通常是很好用的,但是由于以下原因一般把它具体化到一个专用的Shiro.ini 文件中:

l  你可能编辑了许多安全配置,不希望为web.xml  添加版本控制。

l  你可能想从余下的web.xml  配置中分离安全配置。

l  你的安全配置可能变得很大,你想保持web.xml  的苗条并易于阅读。

l  你有个负责的编译系统,相同的shiro  配置可能需要在多个地方被引用。

Web INI配置

除了在配置章节描述的标准的[main] , [user] 和 [roles] 项外,你可以在 shiro.ini  文件中指定具有 web 特性的 [urls] 项:

[urls]项允许你做一些在我们已经见过的任何 Web  框架都不存在的东西:在你的应用程序中定义自适应过滤器链来匹配 URL  路径!

在urls  项的每一行格式如下:

URL_Ant_Path_Expression = Path_Specific_Filter_Chain

例如:


[urls]

/index.html = anon

/user/create = anon

/user/** = authc

/admin/** = authc, roles[administrator]

/rest/** = authc, rest

/remoting/rpc/** = authc, perms["remot:invoke"]

等号左边是一个与Web  应用程序上下文根目录相关的 Ant  风格的路径表达式。请注意,所有的路径表达式都是相对于你的应用程序的上下文根目录而言的。所有的路径都是相对于 HttpServletRequest.getContextPath() 的值来的。


顺序的重要性!

URL 路径表达式按事先定义好的顺序判断传入的请求,并遵循 FIRST MATCHWINS  这一原则。例如,让我们假设有如下链的定义:

/account/** = ssl, authc

/account/signup = anon

如果传入的请求旨在访问/account/signup/index.html (所有 ‘anon‘ymous  用户都能访问),那么它将永不会被处理!原因是因为 /account/** 的模式第一个匹配了传入的请求,“短路”了其余的定义。

始终记住基于FIRST MATCH WINS  的原则定义你的过滤器链!

等号右边是逗号隔开的过滤器列表,用来执行匹配该路径的请求。它必须符合以下格式:

filter1[optional_config1], filter2[optional_config2], ..., filterN[optional_configN]

l  filterN 是一个定义在 [main] 项中的 filter bean  的名字。

l  [optional_configN]是一个可选的括号内的对特定的路径,特定的过滤器有特定含义的字符串(每个过滤器,每个路径的具体配置!)。若果该过滤器对该 URL  路径并不需要特定的配置,你可以忽略括号,于是 filteNr[] 就变成了 filterN 。

因为过滤器标志符定义了链(又名列表),所以请记住 顺序问题 !请按顺序定义好你的逗号分隔的列表,这样请求就能够流通这个链。

在过滤器链中能够使用的过滤器“池”被定义在[main] 项。在 [main] 项中指派给它们的名字就是在过滤器链定义中使用的名字。例如:

[main]

myFilter = com.company.web.some.FilterImplementation

myFilter.property1 = value1

[urls]

/some/path/** = myFilter

时间: 2024-12-06 19:10:38

Apache Shiro Web应用整合-配置的相关文章

org.apache.shiro.web.servlet.ShiroHttpServletRequest cannot be cast to org.springframwork.web.mult..

在用dwz框架+spring MVC时上传文件报的错 具体错误如下: 其实就是一个类型转换错误,但却研究了好长时间,怎么都不知道哪里错了,因为前面卸过一个文件上传的和这个差不多,那个就没有问题. 问题解决:其实包这个错误有两个原因:一个是表单的属性,有文件上传是,表单的类型一定要是formdata类型-----我当然不是犯的这个错误. 但后来用断点调试的时候,发现后台接收的类型不是formdata类型的,这就奇怪了.难道是这个表单和其他的东西有什么莫名的联系??好了, 大晚上的也不兜圈子了,困了

Apache Shiro系列之五:配置

Shiro设计的初衷就是可以运行于任何环境:无论是简单的命令行应用程序还是复杂的企业集群应用.由于运行环境的多样性,所以有多种配置机制可用于配置,本节我们将介绍Shiro内核支持的这几种配置机制. 小贴士:多种配置方案: Shiro的SecurityManager是和JavaBean兼容的,所以我们可以使用诸如Java.Xml(Spring.Jboss.Guice等).YAML.Json.Groovy等配置方式.   一.基于Java代码的配置 最简单的创建并且使用SecurityManager

SpringMVC+Apache Shiro+JPA(hibernate)整合配置

序: 关于标题: 说是教学,实在愧不敢当,但苦与本人文笔有限,实在找不到更合理,谦逊的词语表达,只能先这样定义了. 其实最真实的想法,只是希望这个关键词能让更多的人浏览到这篇文章,也算是对于自己写文章的一个肯定吧.^_^! 关于内容: 再写这系列文章之前,本人和许多人一样都是伸手党,并深深的了解咱伸手党且英文较差的朋友对于新知识的学习及获取中文资料少的痛苦.所以本着"取之于民,共享与民"的原则,记录下实际工作中对SpringMVC+Shiro整合应用的部分心得.本人技术水平有限,仅希望

Apache shiro配置与使用(Spring整合)

网络上大部分的博文是关于Apache shiro与Spring MVC的整合,以及使用教程,最近在做一个物流项目的时候使用的是Apache shiro与Spring进行整合,期间遇到了一些问题,花费了一些时间才得到解决,所以本文首先会从介绍shiro框架到理解shiro以及使用shiro框架几个角度进行描述如何正确的使用与理解该框架: 1.权限概述(正确理解认证.授权的基本概念) 2.常见的权限控制的方式(URL拦截的方式.方法注解的方式) 3.权限涉及到的数据表以及模型关系 4.Apache

将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置

配置web.xml,applicationContext.xml, spring-mvc.xml,applicationContext-shiro.xml,而且都有详细的说明. Web.xml是web项目最基本的配置文件,看这个配置,可以快速知道web项目使用什么框架,它就像一个面板,切入我们想用的插件. applicationContext.xml是spring的基本配置,主要配置数据源.JPA实体管理器工厂.事务 spring-mvc.xml是SpringMVC的配置, applicatio

(转)shiro权限框架详解06-shiro与web项目整合(下)

http://blog.csdn.net/facekbook/article/details/54962975 shiro和web项目整合,实现类似真实项目的应用 web项目中认证 web项目中授权 shiro缓存 sessionManager使用 验证码功能实现 记住我功能实现 web项目中认证 实现方式 修改CustomRealm 的 doGetAuthenticationInfo 方法,从数据库中获取用户信息,CustomRealm 返回查询到的用户信息,包括(加密后的密码字符串和salt

springboot 整合apache shiro

这几天因为项目需要,学习了下shiro,由此留下一些记录,也希望对初学shiro的朋友有帮助. springboot 是这两年新兴起来的一个项目,它的出现是为了减少springmvc开发过程中需要引入各种的jar包,各种xml配置文件,它充分利用了JavaConfig的配置模式以及"约定优于配置"的理念,帮开发者配置大部分需要的东西,在github上的springboot项目里面,提供了很多列子, 而apache shiro 是一个轻量级的身份验证与授权框架,与spring secur

(转) shiro权限框架详解06-shiro与web项目整合(上)

http://blog.csdn.net/facekbook/article/details/54947730 shiro和web项目整合,实现类似真实项目的应用 本文中使用的项目架构是springMVC+mybatis,所以我们是基于搭建好的项目进行改造的. 将shiro整合到web应用中 登录 退出 认证信息在页面展现,也就是显示菜单 shiro的过滤器 将shiro整合到web应用中 数据库脚步 sql脚步放到项目中,项目上传到共享的资源中,文章最后给出共享url. 去除项目中不使用shi

【Shiro】Apache Shiro架构之集成web

前面两节内容介绍了Shiro中是如何进行身份和权限的认证,但是只是单纯的进行Shiro的验证,简单一点的话,用的是.ini配置文件,也举了个使用jdbc realm的例子,这篇博文主要来总结一下Shiro是如何集成web的,即如何用在web工程中. 写在前面:本文没有使用web框架,比如springmvc或者struts2,用的是原始的servlet,使用的是.ini配置文件,旨在简单粗暴,说明问题.后面会写一些和框架整合的博文. 本文部分参考Apache Shiro的官方文档,文档地址:htt