JiveJdon3的安全机制使用了标准JAAS容器技术+AOP组件技术,简单易学,对比Spring使用acegi security实现同样功能,真不知道要轻量多少倍,下面贴一下applicationContext-security.xml实现Web URL访问权限检查和组件访问检查的配置,一百多行配置晕倒你,这就是Spring倡导的狗屁轻量吗?是一个跛脚的陷阱啊:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<!-- ======================== FILTER CHAIN ======================= -->
<bean id=
"filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
<property name=
"filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,remoteUserFilter,rememberMeProcessingFilter,anonymousProcessingFilter,securityEnforcementFilter
</value>
<!-- Put channelProcessingFilter before remoteUserFilter to turn on SSL switching -->
<!-- It's off by default b/c Canoo WebTest doesn't support SSL out-of-the-box -->
</property>
</bean>

<!-- ======================== AUTHENTICATION ======================= -->

<!-- Note the order that entries are placed against the objectDefinitionSource is critical.
The FilterSecurityInterceptor will work from the top of the list down to the FIRST pattern that matches the request URL.
Accordingly, you should place MOST SPECIFIC (ie a/b/c/d.*) expressions first, with LEAST SPECIFIC (ie a/.*) expressions last -->
<bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager"/>
<property name="accessDecisionManager" ref="accessDecisionManager"/>
<property name="objectDefinitionSource">
<value>
PATTERN_TYPE_APACHE_ANT
/signup.html=ROLE_ANONYMOUS,admin,user
/passwordHint.html*=ROLE_ANONYMOUS,admin,user
/**/
*.html*=admin,user
/clickstreams.jsp=admin
</value>
</property>
</bean>

<bean id=
"authenticationManager" class="org.acegisecurity.providers.ProviderManager">
<property name=
"providers">
<list>
<ref local=
"daoAuthenticationProvider"/>
<ref local=
"anonymousAuthenticationProvider"/>
<ref local=
"rememberMeAuthenticationProvider"/>
</list>
</property>
</bean>

<!-- Log failed authentication attempts to commons-logging -->
<bean id=
"loggerListener" class="org.acegisecurity.event.authentication.LoggerListener"/>

<bean id=
"daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name=
"userDetailsService" ref="userDAO"/>
<property name=
"userCache" ref="userCache"/>
<property name=
"passwordEncoder" ref="passwordEncoder"/>
</bean>

<!-- This bean definition must be available to ApplicationContext.getBean() so StartupListener
can look for it and detect if password encryption is turned on or not -->
<bean id=
"passwordEncoder" class="org.acegisecurity.providers.encoding.ShaPasswordEncoder"/>

<bean id=
"userCache" class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">
<property name=
"cache">
<bean class=
"org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name=
"cacheManager">
<bean class=
"org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
</property>
<property name=
"cacheName" value="userCache"/>
</bean>
</property>
</bean>

<bean id=
"anonymousAuthenticationProvider" class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">
<property name=
"key" value="anonymous"/>
</bean>

<bean id=
"roleVoter" class="org.acegisecurity.vote.RoleVoter">
<property name=
"rolePrefix" value=""/>
</bean>

<bean id=
"accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased">
<property name=
"allowIfAllAbstainDecisions" value="false"/>
<property name=
"decisionVoters">
<list>
<ref local=
"roleVoter"/>
</list>
</property>
</bean>

<!-- ===================== HTTP REQUEST SECURITY ==================== -->
<bean id=
"httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter"/>

<bean id=
"authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
<property name=
"authenticationManager" ref="authenticationManager"/>
<property name=
"authenticationFailureUrl" value="/login.jsp?error=true"/>
<property name=
"defaultTargetUrl" value="/"/>
<property name=
"filterProcessesUrl" value="/j_security_check"/>
<property name=
"rememberMeServices" ref="rememberMeServices"/>
</bean>

<bean id=
"anonymousProcessingFilter" class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter">
<property name=
"key" value="anonymous"/>
<property name=
"userAttribute" value="anonymous,ROLE_ANONYMOUS"/>
</bean>

<bean id=
"securityEnforcementFilter" class="org.acegisecurity.intercept.web.SecurityEnforcementFilter">
<property name=
"filterSecurityInterceptor" ref="filterInvocationInterceptor"/>
<property name=
"authenticationEntryPoint" ref="authenticationProcessingFilterEntryPoint"/>
</bean>

<bean id=
"remoteUserFilter" class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter"/>

<bean id=
"authenticationProcessingFilterEntryPoint" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
<property name=
"loginFormUrl" value="/login.jsp"/>
<property name=
"forceHttps" value="false"/>
</bean>

<!-- Override 'userManager' bean definition to add userManagerSecurity interceptor -->
<bean id=
"userManager" parent="txProxyTemplate">
<property name=
"target">
<bean class=
"org.appfuse.service.impl.UserManagerImpl">
<property name=
"userDAO" ref="userDAO"/>
</bean>
</property>
<!-- Override default transaction attributes b/c of UserExistsException -->
<property name=
"transactionAttributes">
<props>
<prop key=
"save*">PROPAGATION_REQUIRED,-UserExistsException</prop>
<prop key=
"remove*">PROPAGATION_REQUIRED</prop>
<prop key=
"*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
<property name=
"preInterceptors">
<list>
<ref bean=
"userSecurityInterceptor"/>
<ref bean=
"userManagerSecurity"/>
</list>
</property>
</bean>

<bean id=
"userManagerSecurity" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor">
<property name=
"authenticationManager" ref="authenticationManager"/>
<property name=
"accessDecisionManager" ref="accessDecisionManager"/>
<property name=
"objectDefinitionSource">
<value>
org.appfuse.service.UserManager.getUsers=admin
org.appfuse.service.UserManager.removeUser=admin
</value>
</property>
</bean>

<!-- ===================== REMEMBER ME ==================== -->
<bean id=
"rememberMeProcessingFilter" class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter">
<property name=
"rememberMeServices" ref="rememberMeServices"/>
</bean>

<bean id=
"rememberMeServices" class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices">
<property name=
"userDetailsService" ref="userDAO"/>
<property name=
"key" value="appfuseRocks"/>
<property name=
"parameter" value="rememberMe"/>
</bean>

<bean id=
"rememberMeAuthenticationProvider" class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
<property name=
"key" value="appfuseRocks"/>
</bean>

<!-- ===================== SSL SWITCHING ==================== -->
<bean id=
"channelProcessingFilter" class="org.acegisecurity.securechannel.ChannelProcessingFilter">
<property name=
"channelDecisionManager" ref="channelDecisionManager"/>
<property name=
"filterInvocationDefinitionSource">
<value>
PATTERN_TYPE_APACHE_ANT
/admin
/**=REQUIRES_SECURE_CHANNEL
/login*=REQUIRES_SECURE_CHANNEL
/j_security_check*=REQUIRES_SECURE_CHANNEL
/editProfile.html*=REQUIRES_SECURE_CHANNEL
/signup.html*=REQUIRES_SECURE_CHANNEL
/saveUser.html*=REQUIRES_SECURE_CHANNEL
/**=REQUIRES_INSECURE_CHANNEL
</value>
</property>
</bean>

<bean id="channelDecisionManager" class="org.acegisecurity.securechannel.ChannelDecisionManagerImpl">
<property name="channelProcessors">
<list>
<bean class="org.acegisecurity.securechannel.SecureChannelProcessor"/>
<bean class="org.acegisecurity.securechannel.InsecureChannelProcessor"/>
</list>
</property>
</bean>
</beans>


请问我将数据库升级到MySQL4.1需要改应用系统的哪些配置啊?