apache shiro使用

Shiro是什么:
Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。认证和授权为权限控制的核心,简单来说,“认证”就是证明你是谁? Web 应用程序一般做法通过表单提交用户名及密码达到认证目的。“授权”即是否允许已认证用户访问受保护资源。
Shiro能做什么:
认证(Authentication):验证用户来核实他们的身份
授权(Authorization):对用户执行访问控制,如:判断用户是否被分配了一个确定的安全角色,判断用户是否被允许做某事
会话管理(Session Management):在任何环境下使用Session API
加密(Cryptography):以更简洁易用的方式使用加密的功能,保护或隐藏数据防止被偷窥
shiro与spring集成:

第一步:配置web.xml

<!-- 配置Shiro过滤器,先让Shiro过滤系统接收到的请求 -->
<!-- 这里filter-name必须对应applicationContext.xml中定义的<bean id="shiroFilter"/> -->
<!-- 使用[/*]匹配所有请求,保证所有的可控请求都经过Shiro的过滤 -->
<!-- 通常会将此filter-mapping放置到最前面(即其他filter-mapping前面),以保证它是过滤器链中第一个起作用的 -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 

 第二步:配置spring-shiro.xml

<!-- 继承自AuthorizingRealm的自定义Realm,即指定Shiro验证用户登录的类为自定义的richwaySystemRealm.java -->  
<bean id="richwaySystemRealm" class="com.richway.system.service.RichwaySystemRealm"></bean>
<!-- Shiro默认会使用Servlet容器的Session,可通过sessionMode属性来指定使用Shiro原生Session -->  
<!-- 即<property name="sessionMode" value="native"/>,详细说明见官方文档 -->  
<!-- 这里主要是设置自定义的单Realm应用,若有多个Realm,可使用'realms'属性代替 -->  
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
	<!--设置自定义realm -->
	<property name="realm" ref="richwaySystemRealm" />
	<property name="cacheManager" ref="ehCacheShiro"></property>   
</bean> 
<!-- Shiro主过滤器本身功能十分强大,其强大之处就在于它支持任何基于URL路径表达式的、自定义的过滤器的执行 --> 
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- Shiro的核心安全接口,这个属性是必须的 -->  
	<property name="securityManager" ref="securityManager" />
<!-- 要求登录时的链接,非必须的属性,默认会自动寻找Web工程根目录下的"/login.jsp"页面 -->  
	<property name="loginUrl" value="/login.jsp" />
	<!-- 用户访问未对其授权的资源时,所显示的连接 -->
	<property name="unauthorizedUrl" value="/error.jsp" />
	<property name="filterChainDefinitions">
		<value>
		<!-- Anon:不指定过滤器 Authc:验证,这些页面必须验证后才能访问,也就是我们说的登录后才能访问。-->
			/login.jsp = anon
			/error.jsp= anon
			/system/*.jsp = authc
			/success.jsp = authc
		</value>
	</property>
</bean>
<bean id="ehCacheShiro" class="org.apache.shiro.cache.ehcache.EhCacheManager">  
        <property name="cacheManagerConfigFile" value="classpath:config/ehcache-shiro.xml"/>  
    </bean>   

 

 第三步:配置 ehcache-shiro.xml

<!--
       name:缓存名称。
       maxElementsInMemory:缓存最大个数。
       eternal:对象是否永久有效,一但设置了,timeout将不起作用。
       timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
       timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
       overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
       diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
       maxElementsOnDisk:硬盘最大缓存个数。
       diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
       diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
       memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
       clearOnFlush:内存数量最大时是否清除。
    -->
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />
</ehcache>

   第四步:在sqlserver数据库中新建数据库test和SYS_USER表

  

写道
CREATE TABLE [dbo].[SYS_USER](
[id] [varchar](32) NOT NULL,
[username] [varchar](50) NULL,
[password] [varchar](50) NULL,
[sex] [varchar](10) NULL,
[phone] [varchar](50) NULL,
[addr] [varchar](100) NULL,
[tm] [datetime] NULL,
CONSTRAINT [PK_SYS_USER] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

 

  

   附件中给出了我整理的一个shirodemo的例子(使用了spring mvc和spring jpa hibernate的实现),配置文件中增加了spring-mvc.xml的配置和spring jpa 中persistence.xml、applicationContext.xml的配置。如需要可下载。

相关jar包下载地址:http://pan.baidu.com/s/1hqovkSO

猜你喜欢

转载自hedongxu1987.iteye.com/blog/2184458