SpringMVC shiro 简单xml配置

相关jar包

<!-- shiro begin -->
<dependency>
	<artifactId>quartz</artifactId>
	<groupId>org.opensymphony.quartz</groupId>
	<version>1.6.1</version>
</dependency>
<dependency>
	<groupId>org.apache.shiro</groupId>
	<artifactId>shiro-core</artifactId>
	<version>1.2.2</version>
</dependency>

<dependency>
	<groupId>org.apache.shiro</groupId>
	<artifactId>shiro-web</artifactId>
	<version>1.2.2</version>
</dependency>
<dependency>
	<groupId>org.apache.shiro</groupId>
	<artifactId>shiro-quartz</artifactId>
	<version>1.2.2</version>
</dependency>
<dependency>
	<groupId>org.apache.shiro</groupId>
	<artifactId>shiro-spring</artifactId>
	<version>1.2.2</version>
</dependency>
<!-- shiro end -->

WEB.xml 配置 

<filter>
	<filter-name>shiroFilter</filter-name>
	<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
	<filter-name>shiroFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>


1.如果你的项目动态请求都是*.action ,*.do 等结尾,那么拦截配置就直接配置为
<url-pattern>*.action</url-pattern> 或者<url-pattern>*.do</url-pattern> 

2.过滤器配置的顺序,过滤器最好配置的位置是在org.springframework.web.filter.CharacterEncodingFilter 
之后,就是处理好字符集就是Shiro的过滤器。

XML配置简单介绍 

<!--大致解释:
<bean id="shiroDbRealm" class="org.shiro.demo.service.realm.ShiroDbRealm" ></bean>
这个就是指定Shiro验证用户登录的类为自定义的ShiroDbRealm.java。-->

<!-- 項目自定义的Realm -->
    <bean id="shiroDbRealm" class="org.shiro.demo.service.realm.ShiroDbRealm" ></bean>
    


<!--在Shiro Filter当中:
1.securityManager:这个属性是必须的。
2.loginUrl :没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,
    不输入地址的话会自动寻找项目web项目的根目录下的”/login.jsp”页面 
3.successUrl :登录成功默认跳转页面,不配置则跳转至”/”。如果登陆前点击的一个需要登录
    的页面,则在登录自动跳转到那个需要登录的页面。不跳转到此。
4.unauthorizedUrl :没有权限默认跳转的页面。
5.filterChainDefinitions : 就是需要验证的地址的列表,常用的包含
    anon、authc、perms、roles、user、logout。
6./login = anon  代表后缀为/login的链接不验证
7./** = authc   代表其它后缀的链接都进行登录验证,需登录后才能访问。-->

    <!-- Shiro Filter -->
    <bean id="shiroFilter"
        class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager" />
        <property name="loginUrl" value="/" />
        <property name="successUrl" value="/system/main" />
        <property name="unauthorizedUrl" value="/system/error" />
        <property name="filterChainDefinitions">
            <value>
            /login = anon
            /validateCode = anon
            /** = authc
            </value>
        </property>
    </bean>

XML 配置介绍2

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

	<description>== Shiro Components ==</description>
    
 	    <!-- 会话ID生成器 -->
        <!--shiro的SessionDAO实现使用SessionIdGenerator接口自动的生成会话session ID;-->
    <bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator"/>

    <!-- 会话Cookie模板 -->
    <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
    	<!--cookie的name,我故意取名叫xxxxbaidu -->
        <constructor-arg value="v_v-s-baidu"/>
        <property name="httpOnly" value="true"/>
        <!--cookie的有效时间 -->
        <property name="maxAge" value="-1"/>
        <!-- 配置存储Session Cookie的domain为 一级域名 -->
        <property name="domain" value=".itboy.net"/>
    </bean>
	<!-- custom shiro session listener -->
	<bean id="customSessionListener" class="com.sojson.core.shiro.listenter.CustomSessionListener">
	    <property name="shiroSessionRepository" ref="jedisShiroSessionRepository"/>
	</bean>

	<!-- 用户信息记住我功能的相关配置 -->
    <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
        <constructor-arg value="v_v-re-baidu"/>
        <property name="httpOnly" value="true"/>
        <!-- 配置存储rememberMe Cookie的domain为 一级域名 -->
        <property name="domain" value=".itboy.net"/>
        <property name="maxAge" value="2592000"/><!-- 30天时间,记住我30天 -->
    </bean>

    <!-- rememberMe管理器 -->
    <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
        <!-- rememberMe cookie加密的密钥 建议每个项目都不一样 默认AES算法 密钥长度(128 256 512 位)-->
        <property name="cipherKey"
                  value="#{T(org.apache.shiro.codec.Base64).decode('4AvVhmFLUs0KTA3Kprsdag==')}"/>
        <property name="cookie" ref="rememberMeCookie"/>
    </bean>
 	
 	
 	 <!-- custom shiro session listener -->
    <bean id="customShiroSessionDAO" class="com.sojson.core.shiro.CustomShiroSessionDAO">
        <property name="shiroSessionRepository" ref="jedisShiroSessionRepository"/>
         <property name="sessionIdGenerator" ref="sessionIdGenerator"/>
    </bean>
 
    <!-- 会话验证调度器 -->
<!-- shiro提供了会话验证调度器,用于定期的验证会话是否已过期,如果过期将停止会话;出于性能考虑,
一般情况下都是获取会话时来验证会话是否过期并停止会话的;但是如在web环境中,如果用户不主动退出是
不知道会话是否过期的,因此需要定期的检测会话是否过期,Shiro提供了会话验证调度器SessionValidationScheduler -->

   <bean id="sessionValidationScheduler" class="org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler">
        <property name="interval" value="${session.validate.timespan}"/>
        <property name="sessionManager" ref="sessionManager"/>
    </bean>

	<!-- 安全管理器 -->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="sampleRealm"/>
        <property name="sessionManager" ref="sessionManager"/>
        <property name="rememberMeManager" ref="rememberMeManager"/>
        <property name="cacheManager" ref="customShiroCacheManager"/>
    </bean>

	<!-- 用户缓存 -->
	<bean id="customShiroCacheManager" class="com.sojson.core.shiro.cache.impl.CustomShiroCacheManager">
	    <property name="shiroCacheManager" ref="jedisShiroCacheManager"/>
	</bean>
	
	<!-- shiro 缓存实现,对ShiroCacheManager,我是采用redis的实现 -->
	<bean id="jedisShiroCacheManager" class="com.sojson.core.shiro.cache.impl.JedisShiroCacheManager">
	    <property name="jedisManager" ref="jedisManager"/>
	</bean>

	<!-- redis 的缓存 -->
	<bean id="jedisManager" class="com.sojson.core.shiro.cache.JedisManager">
	    <property name="jedisPool" ref="jedisPool"/>
	</bean>

	<!-- 相当于调用SecurityUtils.setSecurityManager(securityManager) -->
    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="staticMethod" value="org.apache.shiro.SecurityUtils.setSecurityManager"/>
        <property name="arguments" ref="securityManager"/>
    </bean>
	
	
	<!-- 授权 认证 -->
	<bean id="sampleRealm" class="com.sojson.core.shiro.token.SampleRealm" ></bean>

  	<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
  	
	    <property name="sessionValidationInterval" value="1800000"/>  <!-- 相隔多久检查一次session的有效性   -->
		<property name="globalSessionTimeout" value="1800000"/> <!-- session 有效时间为半小时 (毫秒单位)-->  
        <property name="sessionDAO" ref="customShiroSessionDAO"/>
        <property name="sessionListeners">
            <list>
                <ref bean="customSessionListener"/>
            </list>
        </property>
        <property name="sessionValidationScheduler" ref="sessionValidationScheduler"/>
        <property name="sessionValidationSchedulerEnabled" value="true"/>
        <property name="deleteInvalidSessions" value="true"/>
  	
        <property name="sessionIdCookie" ref="sessionIdCookie"/>
	</bean>
 
	<bean id="jedisShiroSessionRepository" class="com.sojson.core.shiro.cache.JedisShiroSessionRepository" >
		 <property name="jedisManager" ref="jedisManager"/>
	</bean>

	<!--
		自定义角色过滤器 支持多个角色可以访问同一个资源 eg:/home.jsp = authc,roleOR[admin,user]
		用户有admin或者user角色 就可以访问
	-->
	
	<!-- 认证数据库存储-->
    <bean id="shiroManager" class="com.sojson.core.shiro.service.impl.ShiroManagerImpl"/>
    <bean id="login" class="com.sojson.core.shiro.filter.LoginFilter"/>
    <bean id="role" class="com.sojson.core.shiro.filter.RoleFilter"/>
	
	
	<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
		<property name="securityManager" ref="securityManager" />
		<property name="loginUrl" value="/u/login.shtml" />
		<!--	TODO 待提取	-->
		<property name="successUrl" value="/" />
		<property name="unauthorizedUrl" value="/?login" />
		
<!--	初始配置,现采用自定义	-->
<!--		<property name="filterChainDefinitions" >-->
<!--			<value>-->
<!--				/** = anon-->
<!--				/page/login.jsp = anon-->
<!--				/page/register/* = anon-->
<!--				/page/index.jsp = authc-->
<!--				/page/addItem* = authc,roles[数据管理员]-->
<!--				/page/file* = authc,roleOR[普通用户,数据管理员]-->
<!--				/page/listItems* = authc,roleOR[数据管理员,普通用户]-->
<!--				/page/showItem* = authc,roleOR[数据管理员,普通用户]-->
<!--				/page/updateItem*=authc,roles[数据管理员]-->
<!--            </value>-->
<!--		</property>-->

		<!-- 读取初始自定义权限内容-->
       <property name="filterChainDefinitions" value="#{shiroManager.loadFilterChainDefinitions()}"/>   
       <property name="filters">
           <util:map>
              <entry key="login" value-ref="login"></entry>
              <entry key="role" value-ref="role"></entry>
           </util:map>
       </property>
	</bean>

	<!-- Shiro生命周期处理器-->
	<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
	
	
	<!-- ============================================================================ -->

</beans>

猜你喜欢

转载自blog.csdn.net/qq_42383787/article/details/88607794