<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
	default-lazy-init="true">

	<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
		<property name="realm" ref="shiroDbRealm" />
		<property name="cacheManager" ref="shiroEhcacheManager" />
		<property name="sessionManager" ref="sessionManager"></property>
	</bean>

	<bean id="sessionManager"
		class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
		<property name="sessionDAO" ref="sessionDAO" />
		<property name="sessionValidationScheduler" ref="sessionValidationScheduler" />
		<property name="globalSessionTimeout" value="86400000" />
		<property name="sessionIdCookie" ref="sharesession" />
		<property name="sessionValidationSchedulerEnabled" value="true" />
		<property name="deleteInvalidSessions" value="true" />
	</bean>

	<bean id="sharesession" class="org.apache.shiro.web.servlet.SimpleCookie">
		<!-- cookie的name,对应的默认是 JSESSIONID -->
		<constructor-arg name="name" value="SHAREJSESSIONID_PROJECTS" />
		<!-- jsessionId的path为 / 用于多个系统共享jsessionId -->
		<property name="path" value="/" />
		<property name="httpOnly" value="true" />
		<!-- <property name="domain" value=".nrbang.net" /> -->
	</bean>
	
	<bean id="sessionDAO" class="com.team.security.MCSessionDAO">
		<property name="client" ref="memcachedClient"></property>
	</bean>
	
	<bean id="sessionValidationScheduler"
		class="org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler">
		<property name="interval" value="1800000" />
		<property name="sessionManager" ref="sessionManager"></property>
	</bean>

	<!-- 用户授权信息Cache, 采用EhCache -->
	<bean id="shiroEhcacheManager" class="com.team.cache.memcached.MemcachedCacheManager">
		<property name="simpleCacheManager" ref="simpleCacheManager"></property>
	</bean>

	<bean id="simpleCacheManager" class="com.team.cache.memcached.SimpleCacheManagerImpl">
		<property name="memcachedClient" ref="memcachedClient"></property>
	</bean>


<!-- depends-on="resourceOperateDao,operateDao,resourceDao" -->
	<bean id="chainDefinitionSectionMetaSource" class="com.team.security.ChainDefinitionSectionMetaSource">
		<property name="filterChainDefinitions">
			<value>
				/html/**=authc
				/register=authc
				/login=authc
				/logout=logout
			</value>
		</property>
	</bean>
	<!-- 自定义的Filter -->

	<!-- 自定义的Realm -->
	<bean id="shiroDbRealm" class="com.team.security.ShiroDbRealm">
		<!-- <property name="client" ref="xMemcachedClient" /> -->
		<!-- depends-on="roleDao,resourceOperateDao,operateDao,resourceDao,userDao,xMemcachedClient" -->
	</bean>

	<!-- Shiro Filter -->
	<bean id="shiroFilter" class="com.team.security.EcShiroFilterFactoryBean">
		<!-- shiro的核心安全接口 -->
		<property name="securityManager" ref="securityManager" />
		<!-- 要求登录时的链接 -->
		<property name="loginUrl" value="/" />
		<!-- 登陆成功后要跳转的连接 -->
		<property name="successUrl" value="/index" />
		<!-- 未授权时要跳转的连接 -->
		<property name="unauthorizedUrl" value="/view/error/error.jsp" />
		<!-- shiro连接约束配置,在这里使用自定义的动态获取资源类 -->
		<property name="filterChainDefinitionMap" ref="chainDefinitionSectionMetaSource" />
	</bean>

	<!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->
	<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />


	<bean
		class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
		<property name="securityManager" ref="securityManager" />
	</bean>

</beans>