`
peterwanghao
  • 浏览: 128097 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache Shiro Web应用整合-配置

阅读更多

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

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

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

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

最后,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  支持的合适的资源前缀,例如:

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

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 文件中:

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

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

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

你有个负责的编译系统,相同的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]

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

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

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

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

[main]

myFilter = com.company.web.some.FilterImplementation

myFilter.property1 = value1

[urls]

/some/path/** = myFilter

 

分享到:
评论

相关推荐

    shiro1.7.1.zip

    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**:这两个模块...

    shiro1.7.1全包修补漏洞.rar

    7. **shiro-servlet-plugin-1.7.1.jar**: 一个Servlet插件,用于将Shiro的过滤器链配置到Web应用程序的Servlet容器中。这样,无需手动在web.xml中配置每个过滤器,而是通过Shiro的配置文件进行管理。 8. **shiro-...

    shiro-1.7.1.zip

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)和加密(Cryptography)等核心功能。`shiro-1.7.1.zip`是一个包含...

    shiro最简单整合版本

    以上就是 Apache Shiro 的最简单整合版本,它涵盖了基本的身份认证、授权流程和配置。然而,实际项目中可能需要考虑更多细节,如会话管理、缓存策略、Web 应用的集成等。Shiro 提供了丰富的 API 和扩展点,可以根据...

    Apache Shiro 集成-spring

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。Shiro 不仅可以用于Java Web 应用,也可以用于独立的Java应用。在集成Spring时,Shiro ...

    Apache Shiro教程

    通过这个Apache Shiro教程,你可以学习到如何构建安全的Java应用,了解Shiro的配置和用法,以及如何在实际项目中实施身份验证、授权、会话管理和加密策略。无论你是初学者还是经验丰富的开发者,Shiro都是一个值得...

    shiro-springmvc-gradle整合

    整合Apache Shiro、Spring MVC和Gradle是一个综合性的任务,涵盖了安全控制、Web应用架构和构建自动化等多个方面。通过这样的整合,我们可以构建出一个高效、安全、易于维护的Web应用。在实际操作中,每个环节的配置...

    Apache Shiro中文开发文档.pdf

    - **应用场景**:无论是简单的命令行应用还是大型集群Web应用,Shiro均能提供一致的安全支持。 通过以上详细解析,我们可以看到Apache Shiro 不仅是一款功能全面的安全框架,而且其设计上注重易用性和灵活性,非常...

    shiro-shiro-root-1.5.3.zip

    Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能,使得开发者能够轻松处理应用程序的安全需求。"shiro-shiro-root-1.5.3.zip"是一个包含Apache Shiro 1.5.3版本所有依赖JAR包的...

    springboot-shiro认证系统框架--成型框架

    SpringBoot-Shiro 认证系统框架是一个成熟的解决方案,它整合了SpringBoot和Apache Shiro这两个强大的工具,旨在简化Web应用的安全管理。这个成型框架提供了一个完整的认证中心服务,支持分布式环境,非常适合在生产...

    Spring MVC+Mybatis+Ehcache+Apache Shiro+Bootstrap整合开发java仓库管理系统源码

    - 配置Apache Shiro,创建安全配置,定义 Realm 进行身份验证和授权,设置过滤链以控制访问权限。 - 将Bootstrap样式和JavaScript库引入到项目中,根据需求定制和布局前端页面。 这个仓库管理系统源码是一个综合性...

    整合Apache Oltu 与 Shiro. 提供一个轻量的OAUTH2应用框架

    总之,整合Apache Oltu和Apache Shiro创建的轻量级OAUTH2应用框架,为Web应用和移动设备的安全提供了坚实的基础。通过合理的配置和扩展,开发者可以轻松地实现身份验证、授权和OAuth2的无缝集成,提高应用的安全性。

    SpringBoot与Shiro整合-权限管理实战-课堂笔记.docx

    【SpringBoot与Shiro整合-权限管理实战】的课程主要关注如何将Spring Boot与Apache Shiro框架结合起来,实现高效的安全管理。Spring Boot是Spring框架的一个简化版本,旨在提高开发效率,减少配置工作,同时提供了很...

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

    ### 将Shiro作为应用的权限基础五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置 本文旨在详细介绍如何将Apache Shiro整合到基于SpringMVC和JPA(hibernate)的应用程序中,为系统提供安全控制机制。通过本...

    shiro-all-1.2.3.jar

    "使用说明.txt" 文件可能包含如何在项目中引入和配置"shiro-all-1.2.3.jar"的详细指南,包括如何设置Shiro配置文件,以及如何在Spring MVC环境中整合Shiro的步骤。遵循这些说明,开发者可以轻松地将Apache Shiro集成...

    shiro-web-master.zip

    总的来说,"shiro-web-master.zip"的学习资源涵盖了Shiro在Web开发中的核心应用,包括用户身份验证、授权策略、密码加密、Redis缓存的使用,以及如何在实际项目中整合这些功能。对于想要提升Web应用安全性的开发者来...

    shiro与spring web 项目集成.pdf

    Shiro与Spring Web的整合是一个将安全功能集成到Web应用的过程。通过配置ShiroFilter和相关组件,可以轻松地为Spring Web项目添加用户认证、授权和会话管理等安全特性。整合时需要注意Shiro与Spring的依赖关系、配置...

    shiro和web整合实例

    3. **整合 Filter Chain:** 在 Web 应用的 `web.xml` 文件中配置 Shiro 的过滤器链。Shiro 提供了如 `authc`(认证)、`perms`(权限)等过滤器,用于拦截请求并执行相应的安全逻辑。 4. **定义权限表结构:** ...

    SpringBoot与Shiro整合-权限管理实战源码.zip

    在IT行业中,SpringBoot和Apache Shiro是两个非常重要的框架,它们在开发高效、安全的Web应用程序中扮演着核心角色。SpringBoot简化了Spring应用程序的配置和开发过程,而Shiro则是一个强大的安全管理框架,专注于...

    Shiro与SSM整合(内含详细文档介绍)

    Apache Shiro 和 Spring Security (SSM) 是两个广泛使用的Java安全框架,它们分别提供认证、授权、会话管理和加密等功能,以确保Web应用程序的安全性。本资料包将深入讲解如何将Shiro与SSM整合,以实现更高效、灵活...

Global site tag (gtag.js) - Google Analytics