文档章节

shiro在springmvc里面的集成使用【转】

 梵蒂冈考虑过
发布于 2016/09/25 14:24
字数 1327
阅读 35
收藏 2
  1. <dependency>  
  2.          <groupId>commons-collections</groupId>  
  3.          <artifactId>commons-collections</artifactId>  
  4.          <version>3.2.1</version>  
  5.      </dependency>  
  6.   
  7.      <dependency>  
  8.          <groupId>net.sf.ehcache</groupId>  
  9.          <artifactId>ehcache-core</artifactId>  
  10.          <version>2.6.9</version>  
  11.      </dependency>  
  12.   
  13.      <dependency>  
  14.          <groupId>org.apache.shiro</groupId>  
  15.          <artifactId>shiro-spring</artifactId>  
  16.          <version>1.2.3</version>  
  17.      </dependency>  
  18.   
  19.      <dependency>  
  20.          <groupId>org.apache.shiro</groupId>  
  21.          <artifactId>shiro-ehcache</artifactId>  
  22.          <version>1.2.3</version>  
  23.      </dependency>  
  24.   
  25.      <dependency>  
  26.          <groupId>org.apache.shiro</groupId>  
  27.          <artifactId>shiro-quartz</artifactId>  
  28.          <version>1.2.3</version>  
  29.      </dependency>  

 

如果项目是hibernate的,以前的时候ehcache可能不是单例的,因为shiro里面也使用到了ehcache做缓存,和hibernate的ehcache缓存配置有冲突,所以需要对hibernate的ehcache部分做些调整,调整如下:

 

Xml代码  收藏代码

  1. <bean id="sessionFactory"  
  2.          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
  3.        <property name="dataSource" ref="dataSource"></property>  
  4.        <property name="hibernateProperties">  
  5.            <props>  
  6.                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
  7.                <prop key="hibernate.show_sql">true</prop>  
  8.                <prop key="hibernate.hbm2ddl.auto">update</prop>  
  9.                <!-- 
  10.                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</prop> 
  11.                -->  
  12.                <prop key="hibernate.cache.region.factory_class">  
  13.                    org.hibernate.cache.SingletonEhCacheRegionFactory  
  14.                </prop>  
  15.                <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop>  
  16.                <prop key="hibernate.cache.use_second_level_cache">true</prop>  
  17.                <prop key="hibernate.cache.use_query_cache">true</prop>  
  18.                <prop key="hibernate.cache.use_structured_entries">true</prop>  
  19.                <prop key="hibernate.cache.provider_configuration_file_resource_path">WEB-INF/classes/ehcache.xml</prop>  
  20.                <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>  
  21.            </props>  
  22.        </property>  
  23.        <property name="packagesToScan">  
  24.            <list>  
  25.                <value>com.xxx.entity</value>  
  26.            </list>  
  27.        </property>  
  28.    </bean>  

 

上面红色的文字部分是需要调整的内容。

 

 

既然用到了ehcache,ehcahce.xml文件里面的配置内容如下:

 

Xml代码  收藏代码

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <ehcache>  
  3.     <diskStore path="java.io.tmpdir" />  
  4.   
  5.     <defaultCache maxElementsInMemory="10000" eternal="false"  
  6.                   timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" />  
  7.     <cache name="org.hibernate.cache.UpdateTimestampsCache"  
  8.            maxElementsInMemory="5000" eternal="true" overflowToDisk="true" />  
  9.     <cache name="org.hibernate.cache.StandardQueryCache"  
  10.            maxElementsInMemory="10000" eternal="false" timeToLiveSeconds="120"  
  11.            overflowToDisk="true" />  
  12.     <!-- 登录记录缓存 锁定10分钟 -->  
  13.     <cache name="passwordRetryCache"  
  14.            maxEntriesLocalHeap="2000"  
  15.            eternal="false"  
  16.            timeToIdleSeconds="3600"  
  17.            timeToLiveSeconds="0"  
  18.            overflowToDisk="false"  
  19.            statistics="true">  
  20.     </cache>  
  21.   
  22.     <cache name="authorizationCache"  
  23.            maxEntriesLocalHeap="2000"  
  24.            eternal="false"  
  25.            timeToIdleSeconds="3600"  
  26.            timeToLiveSeconds="0"  
  27.            overflowToDisk="false"  
  28.            statistics="true">  
  29.     </cache>  
  30.   
  31.     <cache name="authenticationCache"  
  32.            maxEntriesLocalHeap="2000"  
  33.            eternal="false"  
  34.            timeToIdleSeconds="3600"  
  35.            timeToLiveSeconds="0"  
  36.            overflowToDisk="false"  
  37.            statistics="true">  
  38.     </cache>  
  39.   
  40.     <cache name="shiro-activeSessionCache"  
  41.            maxEntriesLocalHeap="2000"  
  42.            eternal="false"  
  43.            timeToIdleSeconds="3600"  
  44.            timeToLiveSeconds="0"  
  45.            overflowToDisk="false"  
  46.            statistics="true">  
  47.     </cache>  
  48. </ehcache>  

 

 

然后是web.xml文件里面加过滤器,注意要写在springmvc的filter前面

 

Xml代码  收藏代码

  1. <!-- shiro 安全过滤器 -->  
  2. <!-- The filter-name matches name of a 'shiroFilter' bean inside applicationContext.xml -->  
  3. <filter>  
  4.     <filter-name>shiroFilter</filter-name>  
  5.     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  
  6.     <async-supported>true</async-supported>  
  7.     <init-param>  
  8.         <param-name>targetFilterLifecycle</param-name>  
  9.         <param-value>true</param-value>  
  10.     </init-param>  
  11. </filter>  
  12.   
  13. <!-- Make sure any request you want accessible to Shiro is filtered. /* catches all -->  
  14. <!-- requests.  Usually this filter mapping is defined first (before all others) to -->  
  15. <!-- ensure that Shiro works in subsequent filters in the filter chain:             -->  
  16. <filter-mapping>  
  17.     <filter-name>shiroFilter</filter-name>  
  18.     <url-pattern>/*</url-pattern>  
  19. </filter-mapping>  

 

 

然后就是shiro相关的spring配置参数文件了

Xml代码  收藏代码

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:util="http://www.springframework.org/schema/util"  
  4.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.        xsi:schemaLocation="  
  6.        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  7.        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">  
  8.   
  9.     <!-- 缓存管理器 使用Ehcache实现-->  
  10.     <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">  
  11.         <property name="cacheManagerConfigFile" value="classpath:ehcache.xml"/>  
  12.     </bean>  
  13.   
  14.     <bean id="passwordHelper" class="com.shinowit.framework.security.PasswordHelper">  
  15.     </bean>  
  16.   
  17.     <!-- 凭证匹配器 -->  
  18.     <bean id="credentialsMatcher"  
  19.           class="com.shinowit.framework.security.credentials.RetryLimitSimpleCredentialsMatcher">  
  20.         <constructor-arg ref="cacheManager"/>  
  21.         <property name="passwordHelper" ref="passwordHelper"/>  
  22.     </bean>  
  23.   
  24.   
  25.     <bean id="shiro_user_dao" class="com.shinowit.framework.security.dao.UserDAO">  
  26.         <property name="jt" ref="jdbcTemplate"/>  
  27.     </bean>  
  28.   
  29.     <!-- Realm实现 -->  
  30.     <bean id="userRealm" class="com.shinowit.framework.security.realm.UserRealm">  
  31.         <property name="userDAO" ref="shiro_user_dao"/>  
  32.         <property name="credentialsMatcher" ref="credentialsMatcher"/>  
  33.         <!--密码校验接口-->  
  34.         <property name="cachingEnabled" value="true"/>  
  35.         <property name="authenticationCachingEnabled" value="true"/>  
  36.         <property name="authenticationCacheName" value="authenticationCache"/>  
  37.         <property name="authorizationCachingEnabled" value="true"/>  
  38.         <property name="authorizationCacheName" value="authorizationCache"/>  
  39.     </bean>  
  40.   
  41.     <!-- 会话ID生成器 -->  
  42.     <bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator"/>  
  43.   
  44.     <!-- 会话Cookie模板 -->  
  45.     <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">  
  46.         <constructor-arg value="sid"/>  
  47.         <property name="httpOnly" value="true"/>  
  48.         <property name="maxAge" value="180000"/>  
  49.     </bean>  
  50.   
  51.     <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">  
  52.         <constructor-arg value="rememberMe"/>  
  53.         <property name="httpOnly" value="true"/>  
  54.         <property name="maxAge" value="2592000"/>  
  55.         <!-- 30天 -->  
  56.     </bean>  
  57.   
  58.     <!-- rememberMe管理器 -->  
  59.     <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">  
  60.         <property name="cipherKey"  
  61.                   value="#{T(org.apache.shiro.codec.Base64).decode('4AvVhmFLUs0KTA3Kprsdag==')}"/>  
  62.         <property name="cookie" ref="rememberMeCookie"/>  
  63.     </bean>  
  64.   
  65.     <!-- 会话DAO -->  
  66.     <bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO">  
  67.         <property name="activeSessionsCacheName" value="shiro-activeSessionCache"/>  
  68.         <property name="sessionIdGenerator" ref="sessionIdGenerator"/>  
  69.     </bean>  
  70.   
  71.     <!-- 会话验证调度器 -->  
  72.     <bean id="sessionValidationScheduler" class="org.apache.shiro.session.mgt.quartz.QuartzSessionValidationScheduler">  
  73.         <property name="sessionValidationInterval" value="1800000"/>  
  74.         <property name="sessionManager" ref="sessionManager"/>  
  75.     </bean>  
  76.   
  77.     <!-- 会话管理器 -->  
  78.     <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">  
  79.         <property name="globalSessionTimeout" value="1800000"/>  
  80.         <property name="deleteInvalidSessions" value="true"/>  
  81.         <property name="sessionValidationSchedulerEnabled" value="true"/>  
  82.         <property name="sessionValidationScheduler" ref="sessionValidationScheduler"/>  
  83.         <property name="sessionDAO" ref="sessionDAO"/>  
  84.         <property name="sessionIdCookieEnabled" value="true"/>  
  85.         <property name="sessionIdCookie" ref="sessionIdCookie"/>  
  86.     </bean>  
  87.   
  88.     <!-- 安全管理器 -->  
  89.     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
  90.         <property name="realm" ref="userRealm"/>  
  91.         <property name="sessionManager" ref="sessionManager"/>  
  92.         <property name="cacheManager" ref="cacheManager"/>  
  93.         <property name="rememberMeManager" ref="rememberMeManager"/>  
  94.     </bean>  
  95.   
  96.     <!-- 相当于调用SecurityUtils.setSecurityManager(securityManager) -->  
  97.     <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">  
  98.         <property name="staticMethod" value="org.apache.shiro.SecurityUtils.setSecurityManager"/>  
  99.         <property name="arguments" ref="securityManager"/>  
  100.     </bean>  
  101.   
  102.     <!--下面的loginUrl有两个必要条件,一个登陆校验失败以后会强制客户端redirect到这个url,  
  103.     另外一个是登陆的表单(含有用户名及密码)必须action到这个url-->  
  104.     <!-- 自定义的能够接收校验码的身份验证过滤器  
  105.      跳转问题太他妈诡异了,不用了,自己写代码控制如何跳转了  
  106.     <bean id="formAuthenticationFilter" class="com.shinowit.framework.security.filter.ValidFormAuthenticationFilter">  
  107.         <property name="usernameParam" value="loginName"/>  
  108.         <property name="passwordParam" value="loginPass"/>  
  109.         <property name="loginUrl" value="/login/"/>  
  110.     </bean>  
  111. -->  
  112.   
  113.     <!-- Shiro的Web过滤器 -->  
  114.     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  115.         <property name="securityManager" ref="securityManager"/>  
  116.         <property name="loginUrl" value="/login/"/>  
  117.         <property name="unauthorizedUrl" value="/unauthorized.jsp"/>  
  118.         <property name="filters">  
  119.             <map>  
  120.                 <entry key="authc">  
  121.                     <bean class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter"/>  
  122.                 </entry>  
  123.             </map>  
  124.             <!--  
  125.             <util:map>  
  126.                 <entry key="authc" value-ref="formAuthenticationFilter"/>  
  127.             </util:map>  
  128.             -->  
  129.         </property>  
  130.         <property name="filterChainDefinitions">  
  131.             <value>  
  132.                 /index.jsp = anon  
  133.                 /validcode.jsp = anon  
  134.                 /login/ = anon  
  135.                 /static/** = anon  
  136.                 /js/** = anon  
  137.                 /img/** = anon  
  138.                 /unauthorized.jsp = anon  
  139.                 #/login/checklogin = authc  
  140.                 /login/checklogin = anon  
  141.                 /login/logoutlogout = logout  
  142.                 /** = user  
  143.             </value>  
  144.         </property>  
  145.     </bean>  
  146.   
  147.     <!-- Shiro生命周期处理器-->  
  148.     <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>  
  149.   
  150.   
  151. </beans>  

 哦,对了,里面那个fuck那个url是用来改密码的,因为数据库里面的密码是加密的,不这么整总也不可能知道对的md5值是多少。

 

但愿没有忘记什么内容,挺墨迹的,不过能跑起来以后后边关于权限和安全的处理就简单多了,写写注解或者标签就搞定了,很爽。

 

核心技术:Maven,Springmvc mybatis shiro, Druid, Restful, 

Dubbo, ZooKeeper,Redis,FastDFS,ActiveMQ,Nginx 
1.     项目核心代码结构截图

分布式框架介绍 - kafkaee - kafkaee的博客

   项目模块依赖

分布式框架介绍 - kafkaee - kafkaee的博客

 

特别提醒:开发人员在开发的时候可以将自己的业务REST服务化或者Dubbo服务化

2.    项目依赖介绍

   2.1 后台管理系统、Rest服务系统、Scheculer定时调度系统依赖如下图:

 

分布式框架介绍 - kafkaee - kafkaee的博客

       2.2 Dubbo独立服务项目依赖如下图:

 分布式框架介绍 - kafkaee - kafkaee的博客

3.  项目功能部分截图:

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客
 

zookeeper、dubbo服务启动 

分布式框架介绍 - kafkaee - kafkaee的博客

分布式框架介绍 - kafkaee - kafkaee的博客

dubbo管台 

分布式框架介绍 - kafkaee - kafkaee的博客

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 REST服务平台

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

 

分布式框架介绍 - kafkaee - kafkaee的博客

© 著作权归作者所有

粉丝 27
博文 53
码字总数 105771
作品 0
深圳
私信 提问
加载中

评论(1)

梵蒂冈考虑过 博主
赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞
在spring配置文件取url地址,转码显示问题

场景是这样的,cas集成了shiro,在shiro中配置的回调地址我想把这个url转码显示在浏览器中,这样看着更专业点,我地址是在properties文件中的,在spring配置文件中获取地址。 问题: 1。直接在...

一个不正经的程序员
2014/03/28
902
1
Spring集成shiro做登陆认证

一、背景   其实很早的时候,就在项目中有使用到shiro做登陆认证,直到今天才又想起来这茬,自己抽空搭了一个spring+springmvc+mybatis和shiro进行集成的种子项目,当然里面还有很简单的测...

hafiz.zhang
2017/07/23
0
0
Spring Boot 整合 Shiro ,两种方式全总结!

在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro。 一般来说,Spring Security 和 Shiro 的比较如下: Spring Securit...

java菜
06/11
0
0
shiro在springmvc里面的集成使用【转】

<dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>net.sf.ehcache</gro......

看到了打开了
2016/10/20
23
1
SpringMvc + Shiro[数据库存权限] 配置 ;[附git.oschina的项目地址]

一 shiro简介 apache shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证、授权、加密、会话管理等功能。认证和授权为权限控制的核心,简单来说,“认证”就是证明“你是谁?” We...

王庭
2015/10/28
10.9K
2

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
64
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
26
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
43
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
27
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
昨天
44
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部