spring 集成shiro 之 自定义过滤器

出自:http://blog.csdn.net/shuishouhcd/article/details/9077379

最近一段时间,我一直在将shiro集成到我的一个项目中,用作认证和授权处理。

shiro对我来说是个新东西,以下是我学习过的内容:

http://shiro.apache.org/authorization.html

http://www.cnblogs.com/skyme/archive/2011/09/11/2173760.html  系列

http://www.infoq.com/cn/articles/apache-shiro

http://kdboy.iteye.com/blog/1103794

    http://www.ibm.com/developerworks/cn/java/j-lo-shiro/

如果我那个地方没说明白,可以看这些。

集成shiro,需要配置web.xml文件,spring的applicationContext.xml配置文件(当然,独立配置一个shiro.xml文件交给spring容器处理也是可以的)。

web.xml文件中的配置:

[html] view plain copy

  1. <!-- shiro filter的名字是shiroFilter,那么在spring的配置文件中要有一个名字为shiroFilter的bean-->
  2. <filter>
  3. <filter-name>shiroFilter</filter-name>
  4. <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  5. <init-param>
  6. <param-name>targetFilterLifecycle</param-name>
  7. <param-value>true</param-value>
  8. </init-param>
  9. </filter>
  10. <filter-mapping>
  11. <filter-name>shiroFilter</filter-name>
  12. <url-pattern>/*</url-pattern>
  13. </filter-mapping>

applicationContext.xml文件中的配置:

[html] view plain copy

  1. <!-- 自定义的Shiro Filter-->
  2. <bean id="simplePermFilter" class="frame.security.PermissionsAuthorizationFilter"></bean>
  3. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
  4. <property name="securityManager" ref="securityManager" />
  5. <property name="loginUrl" value="/login" />
  6. <property name="successUrl" value="/user/list" />
  7. <property name="unauthorizedUrl" value="/login" />
  8. <property name="filters">
  9. <map>
  10. <entry key="sperm" value-ref="simplePermFilter"/>
  11. </map>
  12. </property>
  13. <property name="filterChainDefinitions">
  14. <value>
  15. /Flat-UI-master/**=anon
  16. /index.jsp* = anon
  17. /test.jsp*=anon
  18. /jsp/** = authc
  19. /test/objT.do = sperm
  20. </value>
  21. </property>
  22. </bean>
  23. <!--设置自定义realm -->
  24. <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
  25. <property name="realm" ref="myRealm" />
  26. </bean>
  27. <!-- 配置shiro bean processor-->
  28. <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
  29. <!--myRealm 继承自AuthorizingRealm-->
  30. <bean id="myRealm" class="frame.security.MonitorRealm" ></bean>
  31. <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
  32. <property name="staticMethod"
  33. value="org.apache.shiro.SecurityUtils.setSecurityManager" />
  34. <property name="arguments" ref="securityManager" />
  35. </bean>

MonitorRealm.java 是自定义的realm,读取数据库的用户信息,和授权信息。

PermissionsAuthorizationFilter.Java 是自定义的过滤器,来实现自己需要的授权过滤方式。

[java] view plain copy

  1. public class MonitorRealm extends AuthorizingRealm{
  2. @Autowired
  3. private DAO dao;<span style="font-family: Consolas, ‘Courier New‘, Courier, mono, serif; font-size: 11.818181991577148px; line-height: 17.27272605895996px; background-color: rgb(248, 248, 248);">//这里自己需要什么就注入什么。  </span>
  4. public MonitorRealm() {
  5. super();
  6. }
  7. /**
  8. * 授权操作,决定那些角色可以使用那些资源
  9. */
  10. @Override
  11. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection pc) {
  12. //<span >TODO </span><span >访问授权信息</span>
  13. return info;
  14. }
  15. /**
  16. * 认证操作,判断一个请求是否被允许进入系统
  17. */
  18. @Override
  19. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
  20. //<span >TODO 用户认证信息  </span>
  21. return info;
  22. }
  23. }

[java] view plain copy

  1. public class PermissionsAuthorizationFilter extends AuthorizationFilter {
  2. public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws IOException {
  3. <span style="font-family: Consolas, ‘Courier New‘, Courier, mono, serif; font-size: 11.818181991577148px; line-height: 17.27272605895996px; background-color: rgb(248, 248, 248);"> //自定义过滤器逻辑</span>
  4. return true;
  5. }
  6. }

配置自定义过滤器的关键是配置文件中 的这几句

[html] view plain copy

  1. <property name="filters">
  2. <map>
  3. <entry key="<span attribute-value" >background-color: rgb(255, 255, 0);">sperm</span>" value-ref="simplePermFilter"/>
  4. </map>
  5. </property>
  6. <property name="filterChainDefinitions">
  7. <value>
  8. ...
  9. /test/objT.do = <span style="background-color: rgb(255, 255, 0);">sperm</span>
  10. </value>
  11. </property>

颜色相同的地方一定要一样,表示用某个过滤器过滤指定路径。因为这个我费了好长时间。

org.apache.shiro.spring.web.ShiroFilterFactoryBean   的作用是通过spring来初始化shiro的工作环境。如果一个请求进来,shiro的过滤器会先工作,过滤器会调用realm中的授权或认证的方法来获取授权或认证信息。

时间: 2024-10-06 00:23:04

spring 集成shiro 之 自定义过滤器的相关文章

shiro实战系列(十五)之Spring集成Shiro

Shiro 的 JavaBean 兼容性使得它非常适合通过 Spring XML 或其他基于 Spring 的配置机制.Shiro 应用程序需要一个具 有单例 SecurityManager 实例的应用程序.请注意,这不会是一个静态的单例,但应该只有一个应用程序能够使用 的实例,无论它是否是静态单例的. Web Applications Shiro 拥有对 Spring Web 应用程序的一流支持.在 Web 应用程序中,所有 Shiro 可访问的万恶不请求必须通过一个 主要的 Shiro 过滤

Shiro学习总结(10)——Spring集成Shiro

1.引入Shiro的Maven依赖 [html] view plain copy <!-- Spring 整合Shiro需要的依赖 --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.1</version> </dependency> <dep

spring集成shiro登陆流程(上)

上一篇已经分析了shiro的入口filter是SpringShiroFilter, 那么它的doFilter在哪儿呢? 我们看到它的直接父类AbstractShrioFilter继承了OncePerRequestFilter类,该类是shiro内置的大部分filter的父类(抽像公共部分),在该类中定义了doFilter方法 OncePerRequestFilte public final void doFilter(ServletRequest request, ServletResponse

细说shiro之五:在spring框架中集成shiro

官网:https://shiro.apache.org/ 1. 下载在Maven项目中的依赖配置如下: <!-- shiro配置 --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>${version.shiro}</version> </dependency&g

Spring Boot 集成Shiro和CAS

请大家在看本文之前,先了解如下知识点: 1.Shiro 是什么?怎么用? 2.Cas 是什么?怎么用? 3.最好有Spring基础 可以先看看这两篇文章,按照这2篇文章的内容做一遍: Spring Boot Shiro 权限管理 CAS单点登录 首先看一下下面这张图: 第一个流程是单纯使用Shiro的流程. 第二个流程是单纯使用Cas的流程. 第三个图是Shiro集成Cas后的流程. [流程图高清图连接:http://img.blog.csdn.net/20160117224937078] PS

Java 权限框架 Shiro 实战二:与spring集成、filter机制

Shiro和Spring的集成,涉及到很多相关的配置,涉及到shiro的filer机制以及它拥有的各种默认filter,涉及到shiro的权限判断标签,权限注解,涉及到session管理等等方面. 1. 配置 首先需要在web.xml中专门负责接入shiro的filter: <!-- shiro 安全过滤器 --> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.

Shiro学习(12)与Spring集成

Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成. 在示例之前,需要导入shiro-spring及spring-context依赖,具体请参考pom.xml. spring-beans.xml配置文件提供了基础组件如DataSource.DAO.Service组件的配置. JavaSE应用 spring-shiro.xml提供了普通JavaSE独立应用的

Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理

本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 PageHelper 进行分页显示.按照前面的博客,已经可以搭建一个简单的 Spring Boot 系统,本篇博客继续对此系统进行改造,主要集成了 Shiro 权限认证框架,关于 Shiro 部分,在本人之前的博客(认证与Shiro安全框架)有介绍到,这里就不做累赘的介绍. 此系列的博客为实践部分

spring cloud 2.x版本 Gateway自定义过滤器教程

前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka-ribbon.eureka-feign和spring-gataway的实现. 参考 eureka-server eureka-client eureka-ribbon eureka-feign spring-gateway 概术 Spring Cloud Gateway内部已经提供非常多的过滤器f