applicationContext-dms-secure.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. - Application context representing the application WITH security services.
  4. -
  5. -->
  6. <beans xmlns="http://www.springframework.org/schema/beans"
  7. xmlns:s="http://www.springframework.org/schema/security"
  8. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  9. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  10. http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">
  11. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  12. <property name="dataSource" ref="dataSource"/>
  13. </bean>
  14. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  15. <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
  16. <property name="url" value="jdbc:hsqldb:mem:securedms"/>
  17. <property name="username" value="sa"/>
  18. <property name="password" value=""/>
  19. </bean>
  20. <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
  21. <property name="transactionAttributeSource">
  22. <value>
  23. sample.dms.secured.SecureDocumentDao.*=PROPAGATION_REQUIRED
  24. sample.dms.DocumentDao.*=PROPAGATION_REQUIRED
  25. org.springframework.security.acls.model.AclService.*=PROPAGATION_REQUIRED
  26. org.springframework.security.acls.model.MutableAclService.*=PROPAGATION_REQUIRED
  27. org.springframework.security.acls.jdbc.JdbcMutableAclService.*=PROPAGATION_REQUIRED
  28. org.springframework.security.acls.jdbc.JdbcAclService.*=PROPAGATION_REQUIRED
  29. </value>
  30. </property>
  31. <property name="transactionManager" ref="transactionManager" />
  32. </bean>
  33. <bean id="documentDao" class="sample.dms.secured.SecureDocumentDaoImpl">
  34. <constructor-arg ref="aclService"/>
  35. <property name="dataSource" ref="dataSource"/>
  36. </bean>
  37. <bean id="dataSourcePopulator" class="sample.dms.secured.SecureDataSourcePopulator">
  38. <constructor-arg ref="dataSource"/>
  39. <constructor-arg ref="documentDao"/>
  40. <constructor-arg ref="aclService"/>
  41. </bean>
  42. <!-- =================================== SECURITY DEFINITION BEANS ======================================== -->
  43. <!-- ======================== AUTHENTICATION (note there is no UI and this is for integration tests only) ======================= -->
  44. <s:authentication-manager alias="authenticationManager">
  45. <s:authentication-provider ref="daoAuthenticationProvider"/>
  46. </s:authentication-manager>
  47. <bean id="jdbcDaoImpl" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
  48. <property name="dataSource" ref="dataSource"/>
  49. </bean>
  50. <bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
  51. <property name="userDetailsService" ref="jdbcDaoImpl"/>
  52. <property name="userCache" ref="userCache"/>
  53. <property name="passwordEncoder">
  54. <bean class="org.springframework.security.authentication.encoding.Md5PasswordEncoder"/>
  55. </property>
  56. </bean>
  57. <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
  58. <bean id="userCacheBackend" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
  59. <property name="cacheManager" ref="cacheManager"/>
  60. <property name="cacheName" value="userCache"/>
  61. </bean>
  62. <bean id="userCache" class="org.springframework.security.core.userdetails.cache.EhCacheBasedUserCache">
  63. <property name="cache" ref="userCacheBackend"/>
  64. </bean>
  65. <!-- Automatically receives AuthenticationEvent messages -->
  66. <bean id="loggerListener" class="org.springframework.security.authentication.event.LoggerListener"/>
  67. <!-- ========================= "BEFORE INVOCATION" AUTHORIZATION DEFINITIONS ============================== -->
  68. <!-- ACL permission masks used by this application -->
  69. <bean id="org.springframework.security.acls.domain.BasePermission.ADMINISTRATION" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
  70. <property name="staticField" value="org.springframework.security.acls.domain.BasePermission.ADMINISTRATION"/>
  71. </bean>
  72. <bean id="org.springframework.security.acls.domain.BasePermission.READ" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
  73. <property name="staticField" value="org.springframework.security.acls.domain.BasePermission.READ"/>
  74. </bean>
  75. <bean id="org.springframework.security.acls.domain.BasePermission.WRITE" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
  76. <property name="staticField" value="org.springframework.security.acls.domain.BasePermission.WRITE"/>
  77. </bean>
  78. <!-- An access decision voter that reads ROLE_* configuration settings -->
  79. <bean id="roleVoter" class="org.springframework.security.access.vote.RoleVoter"/>
  80. <!-- An access decision voter that reads ACL_ABSTRACT_ELEMENT_WRITE_PARENT configuration settings -->
  81. <bean id="aclAbstractElementWriteParentVoter" class="org.springframework.security.acls.AclEntryVoter">
  82. <constructor-arg ref="aclService"/>
  83. <constructor-arg value="ACL_ABSTRACT_ELEMENT_WRITE_PARENT"/>
  84. <constructor-arg>
  85. <list>
  86. <ref local="org.springframework.security.acls.domain.BasePermission.ADMINISTRATION"/>
  87. <ref local="org.springframework.security.acls.domain.BasePermission.WRITE"/>
  88. </list>
  89. </constructor-arg>
  90. <property name="processDomainObjectClass" value="sample.dms.AbstractElement"/>
  91. <property name="internalMethod" value="getParent"/>
  92. </bean>
  93. <!-- An access decision voter that reads ACL_ABSTRACT_ELEMENT_WRITE configuration settings -->
  94. <bean id="aclAbstractElementWriteVoter" class="org.springframework.security.acls.AclEntryVoter">
  95. <constructor-arg ref="aclService"/>
  96. <constructor-arg value="ACL_ABSTRACT_ELEMENT_WRITE"/>
  97. <constructor-arg>
  98. <list>
  99. <ref local="org.springframework.security.acls.domain.BasePermission.ADMINISTRATION"/>
  100. <ref local="org.springframework.security.acls.domain.BasePermission.WRITE"/>
  101. </list>
  102. </constructor-arg>
  103. <property name="processDomainObjectClass" value="sample.dms.AbstractElement"/>
  104. </bean>
  105. <!-- An access decision manager used by the business objects -->
  106. <bean id="businessAccessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
  107. <property name="allowIfAllAbstainDecisions" value="true"/>
  108. <property name="decisionVoters">
  109. <list>
  110. <ref local="roleVoter"/>
  111. <ref local="aclAbstractElementWriteParentVoter"/>
  112. <ref local="aclAbstractElementWriteVoter"/>
  113. </list>
  114. </property>
  115. </bean>
  116. <!-- ========= ACCESS CONTROL LIST LOOKUP MANAGER DEFINITIONS ========= -->
  117. <bean id="aclCache" class="org.springframework.security.acls.domain.EhCacheBasedAclCache">
  118. <constructor-arg>
  119. <bean class="org.springframework.cache.ehcache.EhCacheFactoryBean">
  120. <property name="cacheManager">
  121. <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
  122. </property>
  123. <property name="cacheName" value="aclCache"/>
  124. </bean>
  125. </constructor-arg>
  126. </bean>
  127. <bean id="lookupStrategy" class="org.springframework.security.acls.jdbc.BasicLookupStrategy">
  128. <constructor-arg ref="dataSource"/>
  129. <constructor-arg ref="aclCache"/>
  130. <constructor-arg ref="aclAuthorizationStrategy"/>
  131. <constructor-arg>
  132. <bean class="org.springframework.security.acls.domain.ConsoleAuditLogger"/>
  133. </constructor-arg>
  134. </bean>
  135. <bean id="aclAuthorizationStrategy" class="org.springframework.security.acls.domain.AclAuthorizationStrategyImpl">
  136. <constructor-arg>
  137. <list>
  138. <bean class="org.springframework.security.core.authority.SimpleGrantedAuthority">
  139. <constructor-arg value="ROLE_ADMINISTRATOR"/>
  140. </bean>
  141. <bean class="org.springframework.security.core.authority.SimpleGrantedAuthority">
  142. <constructor-arg value="ROLE_ADMINISTRATOR"/>
  143. </bean>
  144. <bean class="org.springframework.security.core.authority.SimpleGrantedAuthority">
  145. <constructor-arg value="ROLE_ADMINISTRATOR"/>
  146. </bean>
  147. </list>
  148. </constructor-arg>
  149. </bean>
  150. <bean id="aclService" class="org.springframework.security.acls.jdbc.JdbcMutableAclService">
  151. <constructor-arg ref="dataSource"/>
  152. <constructor-arg ref="lookupStrategy"/>
  153. <constructor-arg ref="aclCache"/>
  154. </bean>
  155. <!-- ============== "AFTER INTERCEPTION" AUTHORIZATION DEFINITIONS =========== -->
  156. <bean id="afterInvocationManager" class="org.springframework.security.access.intercept.AfterInvocationProviderManager">
  157. <property name="providers">
  158. <list>
  159. <ref local="afterAclCollectionRead"/>
  160. </list>
  161. </property>
  162. </bean>
  163. <!-- Processes AFTER_ACL_COLLECTION_READ configuration settings -->
  164. <bean id="afterAclCollectionRead" class="org.springframework.security.acls.afterinvocation.AclEntryAfterInvocationCollectionFilteringProvider">
  165. <constructor-arg ref="aclService"/>
  166. <constructor-arg>
  167. <list>
  168. <ref local="org.springframework.security.acls.domain.BasePermission.ADMINISTRATION"/>
  169. <ref local="org.springframework.security.acls.domain.BasePermission.READ"/>
  170. </list>
  171. </constructor-arg>
  172. </bean>
  173. <!-- ================= METHOD INVOCATION AUTHORIZATION ==================== -->
  174. <bean id="methodSecurityAdvisor" class="org.springframework.security.access.intercept.aopalliance.MethodSecurityMetadataSourceAdvisor">
  175. <constructor-arg value="methodSecurityInterceptor" />
  176. <constructor-arg ref="msmds" />
  177. <constructor-arg value="msmds" />
  178. </bean>
  179. <bean id="methodSecurityInterceptor" class="org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor">
  180. <property name="authenticationManager" ref="authenticationManager"/>
  181. <property name="accessDecisionManager" ref="businessAccessDecisionManager"/>
  182. <property name="afterInvocationManager" ref="afterInvocationManager"/>
  183. <property name="securityMetadataSource" ref="msmds" />
  184. </bean>
  185. <s:method-security-metadata-source id="msmds">
  186. <s:protect method="sample.dms.DocumentDao.create" access="ACL_ABSTRACT_ELEMENT_WRITE_PARENT" />
  187. <s:protect method="sample.dms.DocumentDao.delete" access="ACL_ABSTRACT_ELEMENT_WRITE" />
  188. <s:protect method="sample.dms.DocumentDao.update" access="ACL_ABSTRACT_ELEMENT_WRITE" />
  189. <s:protect method="sample.dms.DocumentDao.findElements" access="AFTER_ACL_COLLECTION_READ" />
  190. <s:protect method="sample.dms.secured.SecureDocumentDao.getUsers" access="ROLE_USER" />
  191. </s:method-security-metadata-source>
  192. </beans>