将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
l
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
|
分享到:
相关推荐
5. **shiro-spring-1.7.1.jar**:Spring整合模块,使得Shiro可以与Spring框架无缝集成,便于在Spring应用中使用Shiro的特性。 6. **shiro-crypto-hash-1.7.1.jar**和**shiro-crypto-cipher-1.7.1.jar**:这两个模块...
7. **shiro-servlet-plugin-1.7.1.jar**: 一个Servlet插件,用于将Shiro的过滤器链配置到Web应用程序的Servlet容器中。这样,无需手动在web.xml中配置每个过滤器,而是通过Shiro的配置文件进行管理。 8. **shiro-...
Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)和加密(Cryptography)等核心功能。`shiro-1.7.1.zip`是一个包含...
以上就是 Apache Shiro 的最简单整合版本,它涵盖了基本的身份认证、授权流程和配置。然而,实际项目中可能需要考虑更多细节,如会话管理、缓存策略、Web 应用的集成等。Shiro 提供了丰富的 API 和扩展点,可以根据...
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。Shiro 不仅可以用于Java Web 应用,也可以用于独立的Java应用。在集成Spring时,Shiro ...
通过这个Apache Shiro教程,你可以学习到如何构建安全的Java应用,了解Shiro的配置和用法,以及如何在实际项目中实施身份验证、授权、会话管理和加密策略。无论你是初学者还是经验丰富的开发者,Shiro都是一个值得...
整合Apache Shiro、Spring MVC和Gradle是一个综合性的任务,涵盖了安全控制、Web应用架构和构建自动化等多个方面。通过这样的整合,我们可以构建出一个高效、安全、易于维护的Web应用。在实际操作中,每个环节的配置...
- **应用场景**:无论是简单的命令行应用还是大型集群Web应用,Shiro均能提供一致的安全支持。 通过以上详细解析,我们可以看到Apache Shiro 不仅是一款功能全面的安全框架,而且其设计上注重易用性和灵活性,非常...
Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能,使得开发者能够轻松处理应用程序的安全需求。"shiro-shiro-root-1.5.3.zip"是一个包含Apache Shiro 1.5.3版本所有依赖JAR包的...
SpringBoot-Shiro 认证系统框架是一个成熟的解决方案,它整合了SpringBoot和Apache Shiro这两个强大的工具,旨在简化Web应用的安全管理。这个成型框架提供了一个完整的认证中心服务,支持分布式环境,非常适合在生产...
- 配置Apache Shiro,创建安全配置,定义 Realm 进行身份验证和授权,设置过滤链以控制访问权限。 - 将Bootstrap样式和JavaScript库引入到项目中,根据需求定制和布局前端页面。 这个仓库管理系统源码是一个综合性...
总之,整合Apache Oltu和Apache Shiro创建的轻量级OAUTH2应用框架,为Web应用和移动设备的安全提供了坚实的基础。通过合理的配置和扩展,开发者可以轻松地实现身份验证、授权和OAuth2的无缝集成,提高应用的安全性。
【SpringBoot与Shiro整合-权限管理实战】的课程主要关注如何将Spring Boot与Apache Shiro框架结合起来,实现高效的安全管理。Spring Boot是Spring框架的一个简化版本,旨在提高开发效率,减少配置工作,同时提供了很...
### 将Shiro作为应用的权限基础五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置 本文旨在详细介绍如何将Apache Shiro整合到基于SpringMVC和JPA(hibernate)的应用程序中,为系统提供安全控制机制。通过本...
"使用说明.txt" 文件可能包含如何在项目中引入和配置"shiro-all-1.2.3.jar"的详细指南,包括如何设置Shiro配置文件,以及如何在Spring MVC环境中整合Shiro的步骤。遵循这些说明,开发者可以轻松地将Apache Shiro集成...
总的来说,"shiro-web-master.zip"的学习资源涵盖了Shiro在Web开发中的核心应用,包括用户身份验证、授权策略、密码加密、Redis缓存的使用,以及如何在实际项目中整合这些功能。对于想要提升Web应用安全性的开发者来...
Shiro与Spring Web的整合是一个将安全功能集成到Web应用的过程。通过配置ShiroFilter和相关组件,可以轻松地为Spring Web项目添加用户认证、授权和会话管理等安全特性。整合时需要注意Shiro与Spring的依赖关系、配置...
3. **整合 Filter Chain:** 在 Web 应用的 `web.xml` 文件中配置 Shiro 的过滤器链。Shiro 提供了如 `authc`(认证)、`perms`(权限)等过滤器,用于拦截请求并执行相应的安全逻辑。 4. **定义权限表结构:** ...
在IT行业中,SpringBoot和Apache Shiro是两个非常重要的框架,它们在开发高效、安全的Web应用程序中扮演着核心角色。SpringBoot简化了Spring应用程序的配置和开发过程,而Shiro则是一个强大的安全管理框架,专注于...
Apache Shiro 和 Spring Security (SSM) 是两个广泛使用的Java安全框架,它们分别提供认证、授权、会话管理和加密等功能,以确保Web应用程序的安全性。本资料包将深入讲解如何将Shiro与SSM整合,以实现更高效、灵活...