特别感谢lhacker分享的文章,对我帮助很大

http://www.aiuxian.com/article/p-1913280.html

基本的知识就不在这里讲了,在实战中体会shiro的整体设计理念

首先,大体的了解了一下shiro,发现shiro自带的所有功能并不能满足真正的开发需求,决定自定义部分功能。

在自定义之前,先把web.xml配置好

  1. <!-- shiro配置文件 -->
  2. <context-param>
  3. <param-name>contextConfigLocation</param-name>
  4. <param-value>
  5. classpath:shiro-context.xml
  6. </param-value>
  7. </context-param>
  8. <!-- spring上下文监听 -->
  9. <listener>
  10. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  11. </listener>
  12.  
  13. <!-- shiro过滤器-->
  14. <filter>
  15. <filter-name>shiroFilter</filter-name>
  16. <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  17. <init-param>
  18. <param-name>targetFilterLifecycle</param-name>
  19. <param-value>true</param-value>
  20. </init-param>
  21. </filter>
  22. <filter-mapping>
  23. <filter-name>shiroFilter</filter-name>
  24. <url-pattern>/*</url-pattern>
  25. </filter-mapping>
  26.  
  27. <!-- springMVC字符编码过滤器 -->
  28. <filter>
  29. <filter-name>encodingFilter</filter-name>
  30. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  31. <init-param>
  32. <param-name>encoding</param-name>
  33. <param-value>UTF-8</param-value>
  34. </init-param>
  35. </filter>
  36. <filter-mapping>
  37. <filter-name>encodingFilter</filter-name>
  38. <url-pattern>/*</url-pattern>
  39. </filter-mapping>
  40.  
  41. <!-- springMVC -->
  42. <servlet><servlet-name>action</servlet-name>
  43. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  44. <init-param>
  45. <param-name>contextConfigLocation</param-name>
  46. <param-value>classpath:applicationContext.xml</param-value>
  47. </init-param>
  48. <load-on-startup>1</load-on-startup>
  49. </servlet>
  50. <servlet-mapping>
  51. <servlet-name>action</servlet-name>
  52. <url-pattern>*.do</url-pattern>
  53. </servlet-mapping>
  54.  
  55. <session-config>
  56. <session-timeout>20</session-timeout>
  57. </session-config>

1、自定义shiro的验证

shiro的验证并不能实现我想要的功能,我想自己实现我想要的功能,这里自定义role验证,新建一个

  1. AnyRolesAuthorizationFilter继承AuthorizationFilter,重写 isAccessAllowed方法,这个类会在<strong style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">下面是自定义role权限验证的配置</strong>

  1. <!-- 定义 web 支持的 SecurityManager 和'shiroFilter' bean 将会被 web.xml 引用-->
  2. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
  3. <!-- 自定义url过滤 -->
  4. <property name="securityManager" ref="securityManager" />
  5. <!-- 自定义role验证 -->
  6. <property name="filters">
  7. <map>
  8. <entry key="anyRoles" value-ref="anyRolesAuthorizationFilter" />
  9. </map>
  10. </property>
  11. <property name="filterChainDefinitions">
  12. <value>
  13. /edit.html = anyRoles[admin]
  14. /** = anon
  15. </value>
  16. </property>
  17. </bean>
  1. <!-- 自定义role验证的实现类 -->
  2. <span style="white-space:pre"> </span><bean id="anyRolesAuthorizationFilter" class="cn.wo2306.bbs.shiro.service.AnyRolesAuthorizationFilter"></bean>
  1. /**
  2. * 自定义角色权限验证
  3. * @author eguid
  4. *
  5. */
  6. public class AnyRolesAuthorizationFilter extends AuthorizationFilter{
  7.  
  8. @Override
  9. protected boolean isAccessAllowed(ServletRequest req,
  10. ServletResponse res, Object arg2) throws Exception {
  1. }
  1. }

2、自定义授权和缓存管理

我们要自定义授权管理和缓存管理

其中,

授权管理由realm定义,用于管理用户授权;这里我们自定义一个类MyShiroRealm用于重写realm授权。

缓存管理,主要用于管理shiro内部对session的管理,我们需要session放到redis数据库里,所以这里也要重写

我们使用CustomShiroCacheManager自定义session管理,这个管理器需要用到数据库的操作,所以我们用shiroCacheManager类来处理数据的增删改查业务,redisManager是已经封装好的redis数据库操作包



<!-- 配置安全管理器 -->

  1. <span style="font-size:14px;"><strong> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
  2. <property name="sessionManager" ref="defaultWebSessionManager" />
  3. <!-- 不使用自带的授权管理器,使用自定义授权管理器-->
  4. <property name="realm" ref="myShiroRealm"></property>
  5. <!-- 自定义缓存管理器 -->
  6. <property name="cacheManager" ref="customShiroCacheManager" />
  7. </bean>
  8.  
  9. <!-- 自定义缓存管理 -->
  10. <bean id="customShiroCacheManager" class="cn.wo2306.bbs.shiro.service.CustomShiroCacheManager">
  11. <property name="shiroCacheManager" ref="shiroCacheManager"></property>
  12. </bean>
  13. <bean id="shiroCacheManager" class="cn.wo2306.bbs.shiro.service.ShiroCacheManager">
  14. <property name="redisManager" ref="redisManager"></property>
  15. </bean>
  16. <bean id="redisManager" class="cn.wo2306.bbs.util.redisUtil.RedisManager"></bean>
  17.  
  18. <!-- 自定义session -->
  19. <bean id="defaultWebSessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
  20. <property name="globalSessionTimeout" value="1200000" />
  21. </bean>
  22.  
  23. <!-- 自定义授权管理器 -->
  24. <bean id="myShiroRealm" class="cn.wo2306.bbs.shiro.realms.ShiroDbRealm">
  25. <property name="accountService" ref="accountService" />
  26. </bean>
  27. <bean id="accountService" class="cn.wo2306.bbs.shiro.service.AccountService"></bean>
  28. </strong></span>

配置完这些,你会发现,真正要用shiro,你得把全部实现类重写才能满足我们的需求,可是这个简单需求我完全可以用aop直接实现,而不需要shiro框架;而复杂的权限,shiro根本没办法控制;所以到此为止,给shiro得出结论就是简单但是不通用,不适合复杂权限管理,于是果断放弃shiro。

至于选用什么框架适合,我觉得如果是简单权限管理完全不需要框架(可以采用jdk自带secruity),复杂权限可以采用spring-secruity,有实力可以自行编写一个权限管理框架(个人推荐自行编写,不需要依赖其他框架)。

shiro开发,shiro的环境配置(基于spring+springMVC+redis)的更多相关文章

  1. 详解LUA开发工具及其环境配置

    LUA开发工具及其环境配置是本文要介绍的内容,主要是来了解并学习lua开发工具的使用和环境的配置,第一次接触LUA的话,就跟本人一起学习吧.看我能不能忽悠到你. LUA是语言,那么一定有编写的工具.第 ...

  2. webpack根据开发与生产环境配置不同变量--webpack.DefinePlugin

    webpack有一个DefinePlugin接口,可以实现根据开发与生产环境配置不同变量.范例如下: 需求:开发环境请求baseUrl = '':生产环境请求 baseUrl = 'http://lo ...

  3. 【转存】阿里云服务器下 LAMP 环境配置 —— 基于 CentOS 6.3

    阿里云服务器下 LAMP 环境配置 —— 基于 CentOS 6.3  Posted on 2016年2月10日 by  学院君 1.Apache 配置 —————————————————– vi / ...

  4. Windows下OpenFOAM开发及使用环境配置指南 (2)【转载】

    转载自:http://openfoam.blog.sohu.com/158751915.html *************************************************** ...

  5. Windows下OpenFOAM开发及使用环境配置指南 (1)【转载】

    转载自:http://openfoam.blog.sohu.com/158614863.html *************************************************** ...

  6. 使用U盘安装Linux最美桌面发行版Elementary OS 及常用开发环境配置(JDK,Redis,MySQL,Docker,IDEA,STS)

    前言 假期在家无聊,刚好把六年前的一台笔记本电脑利用起来,原来电脑虽然说配置说不上古董机器,但是运行win系统感觉还是不流畅,所幸给换成Linux桌面版系统,在网上查阅了很多,Linux桌面系统要么推 ...

  7. Android 开发基础及环境配置

    2011年买了第一部安卓操作系统的手机,当时势头正盛的HTC不可思议(incredible),当时的想法就是想学习下智能手机开发,但是由于各种原因,客观上是公司的项目太忙了,忙于项目管理.团队建设.客 ...

  8. RESTLET开发实例(三)基于spring的REST服务

    http://www.lifeba.org/arch/restlet_spring_3.html 前面两篇文章,我们介绍了基于JAX-RS的REST服务以及Application的Rest服务.这里将 ...

  9. [转贴]JAVA:RESTLET开发实例(三)基于spring的REST服务

    前面两篇文章,我们介绍了基于JAX-RS的REST服务以及Application的Rest服务.这里将介绍restlet如何整合spring框架进行开发.Spring 是一个开源框架,是为了解决企业应 ...

随机推荐

  1. 使用SSH框架查出的实体集合用AJAX形式刷新到页面JOSONArray报异常

    所报异常:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException 问题根源:数据库中查出的日期是java.sql. ...

  2. Linq 查询与普通查询的区别

    普通:select * --1 from User(表名) as u --2 where u.Name like '%s%' --3 Linq : from User(表名) as u --1 whe ...

  3. linux基础 作业篇

    1.自动部署反向代理 web nfs #!/usr/bin/python #-*- coding:utf-8 -*- #开发脚本自动部署及监控 #1.编写脚本自动部署反向代理.web.nfs: #!/ ...

  4. WebService学习--股票走势图+天气预报实现

        互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取股票数据和天气预报为例进行学习 ...

  5. git 设置不需要输入密码, 去除 fetch / pull 代码每次都需要输入密码的烦恼

    https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速 设置记住密码(默认15分钟): git config --global credenti ...

  6. Java static 关键字详解

    引言 在<Java编程思想>中有这样一段话:static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类 ...

  7. luogu 1521-求逆序对

    题意: 逆序对指在一个序列中ai>aj && i < j,也就是一前一后两个数,当大的在前面的时候即算一对. 题目求在一个由1-n组成的序列中逆序对为k的序列的个数. 出题 ...

  8. 简单的3D图片轮播dome

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. C返回函数指针的函数

    如下函数 char (*retCharWithInt(char, char))(int); 申明了函数指针retCharWithInt,该指针指向一个形参是(char,char),返回值是char(* ...

  10. APICloud框架——总结一下最近开发APP遇到的一些问题

    距离上一次发文都过去十天了, 下班回来懒的就想睡觉, 今天520一个重要的节日, 恩爱已经秀完, 该干点事情了!! 总结一下最近开发遇到的一些问题, 以及解决方案 纯css三角形 /* 没有哪个方向的 ...