Spring Security使用數據庫管理資源整理

1.網上常見的重寫FilterInvocationDefinitionSource的做法
[url]http://www.family168.com/oa/springsecurity/html/ch005-resource-db.html#d0e585[/url]
具體方法參照這裏
[url]http://www.iteye.com/topic/319965[/url]

此種方法存在一個問題:系統會在初始化時一次將所有資源加載到內存中,即使在數據庫中修改了資源信息,系統也不會再次去從數據庫中讀取資源信息。這就造成了每次修改完數據庫後,都需要重啓系統才能時資源配置生效。
解決方案:如果數據庫中的資源出現的變化,需要刷新內存中已加載的資源信息

2.SpringSide3新寫了一個 FactoryBean,向默認的DefaultFilterInvocationDefinitionSource注入從 ResourceDetailService中返回的RequestMap.

springside中applicationContext-security.xml代碼如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:s="http://www.springframework.org/schema/security"
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-2.5.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd"
default-autowire="byType" default-lazy-init="true">

<description>SpringSecurity安全配置</description>

<!-- http安全配置 -->
<s:http auto-config="true" access-decision-manager-ref="accessDecisionManager">
<s:form-login login-page="/login.action" default-target-url="/"
authentication-failure-url="/login.action?error=true" />
<s:logout logout-success-url="/" />
<s:remember-me key="e37f4b31-0c45-11dd-bd0b-0800200c9a66" />
</s:http>

<!-- 認證配置 -->
<s:authentication-provider user-service-ref="userDetailsService">
<!-- 可設置hash使用sha1或md5散列密碼後再存入數據庫 -->
<s:password-encoder hash="plaintext" />
</s:authentication-provider>

<!-- 項目實現的用戶查詢服務 -->
<bean id="userDetailsService" class="org.springside.examples.miniweb.service.security.UserDetailsServiceImpl" />

<!-- 重新定義的FilterSecurityInterceptor,使用databaseDefinitionSource提供的url-授權關係定義 -->
<bean id="filterSecurityInterceptor" class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
<s:custom-filter before="FILTER_SECURITY_INTERCEPTOR" />
<property name="accessDecisionManager" ref="accessDecisionManager" />
<property name="objectDefinitionSource" ref="databaseDefinitionSource" />
</bean>

<!-- DefinitionSource工廠,使用resourceDetailsService提供的URL-授權關係. -->
<bean id="databaseDefinitionSource" class="org.springside.modules.security.springsecurity.DefinitionSourceFactoryBean">
<property name="resourceDetailsService" ref="resourceDetailsService" />
</bean>

<!-- 項目實現的URL-授權查詢服務 -->
<bean id="resourceDetailsService" class="org.springside.examples.miniweb.service.security.ResourceDetailsServiceImpl" />

<!-- 授權判斷配置, 將授權名稱的默認前綴由ROLE_改爲A_. -->
<bean id="accessDecisionManager" class="org.springframework.security.vote.AffirmativeBased">
<property name="decisionVoters">
<list>
<bean class="org.springframework.security.vote.RoleVoter">
<property name="rolePrefix" value="A_" />
</bean>
<bean class="org.springframework.security.vote.AuthenticatedVoter" />
</list>
</property>
</bean>
</beans>


springside具體代碼參照這裏
[url]http://www.springside.org.cn/[/url]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章