From: <fc...@us...> - 2007-08-30 15:40:20
|
Revision: 412 http://openutils.svn.sourceforge.net/openutils/?rev=412&view=rev Author: fcarone Date: 2007-08-30 08:40:19 -0700 (Thu, 30 Aug 2007) Log Message: ----------- Test app added, but everything is in progress Modified Paths: -------------- trunk/openutils-hibernate-security/pom.xml trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/JavaBeanFilter.java trunk/openutils-hibernate-security/src/test/resources/hibernate.cfg.xml trunk/openutils-hibernate-security/src/test/resources/spring-dao.xml trunk/openutils-hibernate-security/src/test/resources/spring-tests.xml Added Paths: ----------- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDAO.java trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDaoImpl.java trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDataobject.java trunk/openutils-hibernate-security/src/test/resources/spring-security.xml Removed Paths: ------------- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateRUDSecurityInterceptor.java Modified: trunk/openutils-hibernate-security/pom.xml =================================================================== --- trunk/openutils-hibernate-security/pom.xml 2007-08-14 12:55:10 UTC (rev 411) +++ trunk/openutils-hibernate-security/pom.xml 2007-08-30 15:40:19 UTC (rev 412) @@ -13,8 +13,31 @@ <name>openutils-hibernate-security</name> <version>0.0.1-SNAPSHOT</version> <description>Hibernate Security classes</description> + <properties> + <spring.version>2.0.6</spring.version> + </properties> <dependencies> <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-core</artifactId> + <version>${spring.version}</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + <version>${spring.version}</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-dao</artifactId> + <version>${spring.version}</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-aop</artifactId> + <version>${spring.version}</version> + </dependency> + <dependency> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-usermanagement</artifactId> <version>1.1.1</version> @@ -69,7 +92,7 @@ <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> - <version>2.3</version> + <version>2.2</version> </dependency> <dependency> <groupId>org.acegisecurity</groupId> Copied: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java (from rev 393, trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateRUDSecurityInterceptor.java) =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java (rev 0) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java 2007-08-30 15:40:19 UTC (rev 412) @@ -0,0 +1,132 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.hibernate.security.aop; + +import it.openutils.hibernate.security.dataobject.SecurityRule; +import it.openutils.hibernate.security.services.SecurityRuleManager; + +import java.util.ArrayList; +import java.util.List; + +import org.acegisecurity.GrantedAuthority; +import org.acegisecurity.context.SecurityContextHolder; +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; +import org.apache.commons.lang.StringUtils; +import org.hibernate.Filter; +import org.hibernate.SessionFactory; +import org.hibernate.criterion.Criterion; +import org.hibernate.criterion.Restrictions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * This is a Hibernate Read-Update-Delete security interceptor. This enforces a DENY_ALL default policy. + * @author fcarone + * @version $Id: $ + */ +public class HibernateDAOSecurityInterceptor implements MethodInterceptor +{ + + /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(HibernateDAOSecurityInterceptor.class); + + private SecurityRuleManager securityRuleManager; + + private SessionFactory sessionFactory; + + public HibernateDAOSecurityInterceptor() + { + super(); + } + + /** + * {@inheritDoc} + */ + public Object invoke(MethodInvocation invocation) throws Throwable + { + Object[] arguments = invocation.getArguments(); + Object checkArgument = arguments[arguments.length - 1]; + if (!StringUtils.equals(invocation.getMethod().getName(), "findFiltered")) + { + return invocation.proceed(); + } + if (!(checkArgument instanceof List)) + { + return invocation.proceed(); + } + + String entity = StringUtils.EMPTY; + for (int i = 0; i < arguments.length; i++) + { + Object argument = arguments[i]; + if (sessionFactory.getClassMetadata(argument.getClass()) != null) + { + entity = argument.getClass().getCanonicalName(); + break; + } + } + + // the current invocation is not about any session managed entity + if (StringUtils.isEmpty(entity)) + { + return invocation.proceed(); + } + + GrantedAuthority[] authorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities(); + List<String> roles = new ArrayList<String>(); + for (int i = 0; i < authorities.length; i++) + { + roles.add(authorities[i].getAuthority()); + } + List<SecurityRule> rules = securityRuleManager.getRulesForRoles(entity, roles); + + if (rules.isEmpty()) + { + String grantedRoles = StringUtils.EMPTY; + for (int i = 0; i < authorities.length; i++) + { + grantedRoles += authorities[i].getAuthority() + " "; + } + log.error("Access is denied for entity {}, and roles {}", entity, grantedRoles); + throw new SecurityException("Access denied"); + } + + Filter filter = securityRuleManager.getEntityFilterFromRules(entity, rules); + + Criterion sqlCriterion = Restrictions.sqlRestriction(filter.getFilterDefinition().getDefaultFilterCondition()); + + if (StringUtils.equals(invocation.getMethod().getName(), "findFiltered")) + { + Object argument = arguments[arguments.length - 1]; + ((List) argument).add(sqlCriterion); + } + + Object result = invocation.proceed(); + + return result; + } + + /** + * Sets the securityRuleManager. + * @param securityRuleManager the securityRuleManager to set + */ + public void setSecurityRuleManager(SecurityRuleManager securityRuleManager) + { + this.securityRuleManager = securityRuleManager; + } + + /** + * Sets the sessionFactory. + * @param sessionFactory the sessionFactory to set + */ + public void setSessionFactory(SessionFactory sessionFactory) + { + this.sessionFactory = sessionFactory; + } + +} Deleted: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateRUDSecurityInterceptor.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateRUDSecurityInterceptor.java 2007-08-14 12:55:10 UTC (rev 411) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateRUDSecurityInterceptor.java 2007-08-30 15:40:19 UTC (rev 412) @@ -1,109 +0,0 @@ -/* - * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it - */ -package it.openutils.hibernate.security.aop; - -import it.openutils.hibernate.security.dataobject.SecurityRule; -import it.openutils.hibernate.security.services.SecurityRuleManager; - -import java.util.ArrayList; -import java.util.List; - -import org.acegisecurity.GrantedAuthority; -import org.acegisecurity.context.SecurityContextHolder; -import org.aopalliance.intercept.MethodInterceptor; -import org.aopalliance.intercept.MethodInvocation; -import org.apache.commons.lang.StringUtils; -import org.hibernate.Filter; -import org.hibernate.SessionFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - - -/** - * This is a Hibernate Read-Update-Delete security interceptor. This enforces a DENY_ALL default policy. - * @author fcarone - * @version $Id: $ - */ -public class HibernateRUDSecurityInterceptor implements MethodInterceptor -{ - - /** - * Logger. - */ - private Logger log = LoggerFactory.getLogger(HibernateRUDSecurityInterceptor.class); - - private SecurityRuleManager securityRuleManager; - - private SessionFactory sessionFactory; - - /** - * {@inheritDoc} - */ - public Object invoke(MethodInvocation invocation) throws Throwable - { - Object[] arguments = invocation.getArguments(); - - String entity = StringUtils.EMPTY; - for (int i = 0; i < arguments.length; i++) - { - Object argument = arguments[i]; - if (sessionFactory.getClassMetadata(argument.getClass()) != null) - { - entity = argument.getClass().getCanonicalName(); - break; - } - } - - // the current invocation is not about any session managed entity - if (StringUtils.isEmpty(entity)) - { - return invocation.proceed(); - } - - GrantedAuthority[] authorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities(); - List<String> roles = new ArrayList<String>(); - for (int i = 0; i < authorities.length; i++) - { - roles.add(authorities[i].getAuthority()); - } - List<SecurityRule> rules = securityRuleManager.getRulesForRoles(entity, roles); - - if (rules.isEmpty()) - { - String grantedRoles = StringUtils.EMPTY; - for (int i = 0; i < authorities.length; i++) - { - grantedRoles += authorities[i].getAuthority() + " "; - } - log.error("Access is denied for entity {}, and roles {}", entity, grantedRoles); - throw new SecurityException("Access is denied"); - } - - Filter filter = securityRuleManager.getEntityFilterFromRules(entity, rules); - - sessionFactory.getCurrentSession().enableFilter(filter.getName()); - Object result = invocation.proceed(); - sessionFactory.getCurrentSession().disableFilter(filter.getName()); - return result; - } - - /** - * Sets the securityRuleManager. - * @param securityRuleManager the securityRuleManager to set - */ - public void setSecurityRuleManager(SecurityRuleManager securityRuleManager) - { - this.securityRuleManager = securityRuleManager; - } - - /** - * Sets the sessionFactory. - * @param sessionFactory the sessionFactory to set - */ - public void setSessionFactory(SessionFactory sessionFactory) - { - this.sessionFactory = sessionFactory; - } - -} Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/JavaBeanFilter.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/JavaBeanFilter.java 2007-08-14 12:55:10 UTC (rev 411) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/JavaBeanFilter.java 2007-08-30 15:40:19 UTC (rev 412) @@ -41,6 +41,7 @@ * @throws SecurityException If the bean class cannot be accessed * @throws NoSuchFieldException If the property contained in the security rule refers to a bean non-existent field */ + @SuppressWarnings("unchecked") public JavaBeanFilter(String bean, List<SecurityRule> securityRules) throws ClassNotFoundException, InstantiationException, @@ -165,6 +166,7 @@ /** * {@inheritDoc} */ + @SuppressWarnings("unchecked") public Filter setParameterList(String name, Collection values) { return this; Added: trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java =================================================================== --- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java (rev 0) +++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java 2007-08-30 15:40:19 UTC (rev 412) @@ -0,0 +1,37 @@ +package it.openutils.hibernate.security; + +import it.openutils.hibernate.security.apptest.DummyDAO; +import it.openutils.hibernate.security.apptest.DummyDataobject; +import it.openutils.testing.junit.SpringTestCase; + +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ + +/** + * @author fcarone + * @version $Id: $ + */ +public class SecurityIntegrationTest extends SpringTestCase +{ + + private DummyDAO securedObject; + + /** + * @throws Exception Any exception + */ + @Test + public void testRulesApplication() throws Exception + { + securedObject = (DummyDAO) ctx.getBean("dummyDAO"); + DummyDataobject filter = new DummyDataobject(); + List<DummyDataobject> dummyObjects = securedObject.findFiltered(filter); + Assert.assertNotNull(dummyObjects); + } + +} Added: trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDAO.java =================================================================== --- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDAO.java (rev 0) +++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDAO.java 2007-08-30 15:40:19 UTC (rev 412) @@ -0,0 +1,16 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.hibernate.security.apptest; + +import it.openutils.dao.hibernate.HibernateDAO; + + +/** + * @author fcarone + * @version $Id: $ + */ +public interface DummyDAO extends HibernateDAO<DummyDataobject, Long> +{ + +} Added: trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDaoImpl.java =================================================================== --- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDaoImpl.java (rev 0) +++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDaoImpl.java 2007-08-30 15:40:19 UTC (rev 412) @@ -0,0 +1,25 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.hibernate.security.apptest; + +import it.openutils.dao.hibernate.HibernateDAOImpl; + + +/** + * @author fcarone + * @version $Id: $ + */ +public class DummyDaoImpl extends HibernateDAOImpl<DummyDataobject, Long> implements DummyDAO +{ + + /** + * {@inheritDoc} + */ + @Override + protected Class<DummyDataobject> getReferenceClass() + { + return DummyDataobject.class; + } + +} Added: trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDataobject.java =================================================================== --- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDataobject.java (rev 0) +++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDataobject.java 2007-08-30 15:40:19 UTC (rev 412) @@ -0,0 +1,98 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.hibernate.security.apptest; + +import javax.persistence.Column; +import javax.persistence.Id; + + +/** + * @author fcarone + * @version $Id: $ + */ +public class DummyDataobject +{ + + /** + * serial version UID + */ + private static final long serialVersionUID = 1867418705382284287L; + + @Id + @Column(name = "ID", precision = 18) + private Long id; + + @Column(name = "INTVALUE", precision = 10) + private Integer intValue; + + @Column(name = "STRINGVALUE", length = 16) + private String stringValue; + + + /** + * Returns the stringValue. + * @return the stringValue + */ + public String getStringValue() + { + return stringValue; + } + + + /** + * Sets the stringValue. + * @param stringValue the stringValue to set + */ + public void setStringValue(String stringValue) + { + this.stringValue = stringValue; + } + + + + /** + * Returns the id. + * @return the id + */ + public Long getId() + { + return id; + } + + + + /** + * Sets the id. + * @param id the id to set + */ + public void setId(Long id) + { + this.id = id; + } + + + + /** + * Returns the intValue. + * @return the intValue + */ + public Integer getIntValue() + { + return intValue; + } + + + + /** + * Sets the intValue. + * @param intValue the intValue to set + */ + public void setIntValue(Integer intValue) + { + this.intValue = intValue; + } + + + +} Modified: trunk/openutils-hibernate-security/src/test/resources/hibernate.cfg.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/hibernate.cfg.xml 2007-08-14 12:55:10 UTC (rev 411) +++ trunk/openutils-hibernate-security/src/test/resources/hibernate.cfg.xml 2007-08-30 15:40:19 UTC (rev 412) @@ -3,6 +3,7 @@ "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> - <mapping class="it.openutils.hibernate.security.dataobject.SecurityRule" /> + <mapping class="it.openutils.hibernate.security.dataobject.SecurityRule" /> + <mapping class="it.openutils.hibernate.security.apptest.DummyDataobject" /> </session-factory> </hibernate-configuration> \ No newline at end of file Modified: trunk/openutils-hibernate-security/src/test/resources/spring-dao.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-dao.xml 2007-08-14 12:55:10 UTC (rev 411) +++ trunk/openutils-hibernate-security/src/test/resources/spring-dao.xml 2007-08-30 15:40:19 UTC (rev 412) @@ -4,9 +4,16 @@ <beans> <bean id="securityRuleDAO" parent="txProxyTemplate"> <property name="target"> - <bean class="it.openutils.hibernate.security.dao.SecurityRuleDAOImpl"> + <bean class="it.openutils.hibernate.security.dao.impl.SecurityRuleDAOImpl"> <property name="sessionFactory" ref="sessionFactory" /> </bean> </property> + </bean> + <bean id="dummyDAO" parent="txProxyTemplate"> + <property name="target"> + <bean class="it.openutils.hibernate.security.apptest.DummyDaoImpl"> + <property name="sessionFactory" ref="sessionFactory" /> + </bean> + </property> </bean> </beans> \ No newline at end of file Added: trunk/openutils-hibernate-security/src/test/resources/spring-security.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-security.xml (rev 0) +++ trunk/openutils-hibernate-security/src/test/resources/spring-security.xml 2007-08-30 15:40:19 UTC (rev 412) @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" +"http://www.springframework.org/dtd/spring-beans.dtd"> +<beans> + <bean id="securityInterceptor" class="it.openutils.hibernate.security.aop.HibernateDAOSecurityInterceptor"> + <property name="securityRuleManager" ref="securityRuleManager" /> + <property name="sessionFactory" ref="sessionFactory" /> + </bean> + <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> + <property name="beanNames"> + <list> + <idref bean="dummyDAO" /> + </list> + </property> + <property name="interceptorNames"> + <list> + <value>securityInterceptor</value> + </list> + </property> + </bean> +</beans> Modified: trunk/openutils-hibernate-security/src/test/resources/spring-tests.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-tests.xml 2007-08-14 12:55:10 UTC (rev 411) +++ trunk/openutils-hibernate-security/src/test/resources/spring-tests.xml 2007-08-30 15:40:19 UTC (rev 412) @@ -4,5 +4,8 @@ <import resource="classpath:spring-database.xml" /> <import resource="classpath:spring-hibernate.xml" /> <import resource="classpath:spring-dao.xml" /> - <import resource="classpath:spring-managers.xml" /> + <import resource="classpath:spring-managers.xml" /> + <import resource="classpath:spring-security.xml" /> + + </beans> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fc...@us...> - 2007-08-31 12:29:38
|
Revision: 425 http://openutils.svn.sourceforge.net/openutils/?rev=425&view=rev Author: fcarone Date: 2007-08-31 05:29:23 -0700 (Fri, 31 Aug 2007) Log Message: ----------- Sample test application works Modified Paths: -------------- trunk/openutils-hibernate-security/pom.xml trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDataobject.java trunk/openutils-hibernate-security/src/test/resources/database.properties trunk/openutils-hibernate-security/src/test/resources/hibernate.cfg.xml trunk/openutils-hibernate-security/src/test/resources/spring-dao.xml trunk/openutils-hibernate-security/src/test/resources/spring-hibernate.xml trunk/openutils-hibernate-security/src/test/resources/spring-security.xml trunk/openutils-hibernate-security/src/test/resources/spring-tests.xml Added Paths: ----------- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/HsqlDatatypeFactory.java trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml Modified: trunk/openutils-hibernate-security/pom.xml =================================================================== --- trunk/openutils-hibernate-security/pom.xml 2007-08-31 12:28:50 UTC (rev 424) +++ trunk/openutils-hibernate-security/pom.xml 2007-08-31 12:29:23 UTC (rev 425) @@ -50,12 +50,12 @@ <dependency> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-bshd5</artifactId> - <version>1.0.5</version> + <version>1.0.7</version> </dependency> <dependency> <groupId>net.sourceforge.openutils</groupId> - <artifactId>openutils-testing</artifactId> - <version>1.0</version> + <artifactId>openutils-testing-junit</artifactId> + <version>1.1.2</version> <scope>test</scope> </dependency> <dependency> @@ -128,6 +128,12 @@ <scope>test</scope> </dependency> <dependency> + <groupId>hsqldb</groupId> + <artifactId>hsqldb</artifactId> + <version>1.8.0.7</version> + <scope>test</scope> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java 2007-08-31 12:28:50 UTC (rev 424) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java 2007-08-31 12:29:23 UTC (rev 425) @@ -39,14 +39,10 @@ private SessionFactory sessionFactory; - public HibernateDAOSecurityInterceptor() - { - super(); - } - /** * {@inheritDoc} */ + @SuppressWarnings("unchecked") public Object invoke(MethodInvocation invocation) throws Throwable { Object[] arguments = invocation.getArguments(); @@ -77,6 +73,11 @@ return invocation.proceed(); } + if (SecurityContextHolder.getContext().getAuthentication() == null) + { + throw new SecurityException("Authentication is not valid"); + } + GrantedAuthority[] authorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities(); List<String> roles = new ArrayList<String>(); for (int i = 0; i < authorities.length; i++) @@ -129,4 +130,5 @@ this.sessionFactory = sessionFactory; } + } Added: trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/HsqlDatatypeFactory.java =================================================================== --- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/HsqlDatatypeFactory.java (rev 0) +++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/HsqlDatatypeFactory.java 2007-08-31 12:29:23 UTC (rev 425) @@ -0,0 +1,32 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.hibernate.security; + +import java.sql.Types; + +import org.dbunit.dataset.datatype.DataType; +import org.dbunit.dataset.datatype.DataTypeException; +import org.dbunit.dataset.datatype.DefaultDataTypeFactory; + + +/** + * @author fcarone + * @version $Id: $ + */ +public class HsqlDatatypeFactory extends DefaultDataTypeFactory +{ + + /** + * {@inheritDoc} + */ + @Override + public DataType createDataType(int sqlType, String sqlTypeName) throws DataTypeException + { + if (sqlType == Types.BOOLEAN) + { + return DataType.BOOLEAN; + } + return super.createDataType(sqlType, sqlTypeName); + } +} Modified: trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java =================================================================== --- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java 2007-08-31 12:28:50 UTC (rev 424) +++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java 2007-08-31 12:29:23 UTC (rev 425) @@ -1,14 +1,28 @@ package it.openutils.hibernate.security; +import it.openutils.hibernate.example.FilterMetadata; import it.openutils.hibernate.security.apptest.DummyDAO; import it.openutils.hibernate.security.apptest.DummyDataobject; -import it.openutils.testing.junit.SpringTestCase; +import it.openutils.testing.junit.DbUnitTestCase; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import org.acegisecurity.Authentication; +import org.acegisecurity.context.SecurityContextHolder; +import org.acegisecurity.context.SecurityContextImpl; +import org.acegisecurity.providers.AuthenticationProvider; +import org.acegisecurity.providers.UsernamePasswordAuthenticationToken; +import org.dbunit.database.DatabaseConfig; +import org.dbunit.database.IDatabaseConnection; +import org.hibernate.criterion.Criterion; +import org.hibernate.criterion.Order; import org.junit.Assert; import org.junit.Test; + /* * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it */ @@ -17,20 +31,51 @@ * @author fcarone * @version $Id: $ */ -public class SecurityIntegrationTest extends SpringTestCase +public class SecurityIntegrationTest extends DbUnitTestCase { private DummyDAO securedObject; + + /** + * {@inheritDoc} + */ + @Override + protected IDatabaseConnection createConnection() throws SQLException + { + IDatabaseConnection connection = super.createConnection(); + DatabaseConfig config = connection.getConfig(); + config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqlDatatypeFactory()); + return connection; + } + + + + /** * @throws Exception Any exception */ @Test public void testRulesApplication() throws Exception { + // emulate authentication + AuthenticationProvider authenticationProvider = (AuthenticationProvider) ctx.getBean("authenticationProvider"); + Authentication authentication = new UsernamePasswordAuthenticationToken("UserUno", "password"); + authentication = authenticationProvider.authenticate(authentication); + SecurityContextImpl sci = new SecurityContextImpl(); + sci.setAuthentication(authentication); + SecurityContextHolder.setContext(sci); + + // test securedObject = (DummyDAO) ctx.getBean("dummyDAO"); DummyDataobject filter = new DummyDataobject(); - List<DummyDataobject> dummyObjects = securedObject.findFiltered(filter); + List<DummyDataobject> dummyObjects = securedObject.findFiltered( + filter, + new Order[0], + new HashMap<String, FilterMetadata>(), + 500, + 0, + new ArrayList<Criterion>()); Assert.assertNotNull(dummyObjects); } Modified: trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDataobject.java =================================================================== --- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDataobject.java 2007-08-31 12:28:50 UTC (rev 424) +++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDataobject.java 2007-08-31 12:29:23 UTC (rev 425) @@ -4,13 +4,17 @@ package it.openutils.hibernate.security.apptest; import javax.persistence.Column; +import javax.persistence.Entity; import javax.persistence.Id; +import javax.persistence.Table; /** * @author fcarone * @version $Id: $ */ +@Entity +@Table(name = "DUMMYDATAOBJECT") public class DummyDataobject { Added: trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml (rev 0) +++ trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml 2007-08-31 12:29:23 UTC (rev 425) @@ -0,0 +1,127 @@ +<!DOCTYPE dataset SYSTEM "dataset.dtd"> +<dataset> + <table name="APP_USER"> + <column>ID_USER</column> + <column>PASSWORD</column> + <column>ENABLED</column> + <column>NAME</column> + <column>SURNAME</column> + <column>EMAIL</column> + <row> + <value>UserUno</value> + <value>5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8</value> + <value>1</value> + <value>Gino</value> + <value>Rossi</value> + <value>ro...@ba...</value> + </row> + <row> + <value>UserDue</value> + <value>password</value> + <value>1</value> + <value>Mario</value> + <value>Verdi</value> + <value>ve...@ba...</value> + </row> + </table> + <table name="APP_GROUP"> + <column>ID_GROUP</column> + <column>DESCRIPTION</column> + <column>ENABLED</column> + <row> + <value>GRUPPOUNO</value> + <value>descrizione</value> + <value>1</value> + </row> + <row> + <value>GRUPPODUE</value> + <value>descrizione</value> + <value>1</value> + </row> + </table> + <table name="APP_ROLE"> + <column>ID_ROLE</column> + <column>DESCRIPTION</column> + <row> + <value>RoleUno</value> + <value>descr</value> + </row> + <row> + <value>RoleDue</value> + <value>descr2</value> + </row> + <row> + <value>RoleTre</value> + <value>descr3</value> + </row> + </table> + <table name="APP_USER_GROUP"> + <column>ID_USER</column> + <column>ID_GROUP</column> + <row> + <value>UserUno</value> + <value>GRUPPOUNO</value> + </row> + <row> + <value>UserUno</value> + <value>GRUPPODUE</value> + </row> + </table> + <table name="APP_GROUP_ROLE"> + <column>ID_GROUP</column> + <column>ID_ROLE</column> + <row> + <value>GRUPPOUNO</value> + <value>RoleUno</value> + </row> + <row> + <value>GRUPPOUNO</value> + <value>RoleDue</value> + </row> + <row> + <value>GRUPPODUE</value> + <value>RoleTre</value> + </row> + </table> + + <table name="SECURITY_RULE"> + <column>ID_SECURITY_RULE</column> + <column>ROLE</column> + <column>ENTITY</column> + <column>PROPERTY</column> + <column>VALUE</column> + <column>MODIFIER</column> + <row> + <value>1</value> + <value>RoleUno</value> + <value>it.openutils.hibernate.security.apptest.DummyDataobject</value> + <value>intValue</value> + <value>1</value> + <value>EQUALS</value> + </row> + </table> + <table name="SECRULE_PERMISSION"> + <column>ID_SECURITY_RULE</column> + <column>PERMISSION</column> + <row> + <value>1</value> + <value>LOAD</value> + </row> + </table> + <table name="DUMMYDATAOBJECT"> + <column>ID</column> + <column>INTVALUE</column> + <column>STRINGVALUE</column> + <row> + <value>0</value> + <value>0</value> + <value>ABC</value> + </row> + <row> + <value>1</value> + <value>1</value> + <value>DEF</value> + </row> + </table> +</dataset> + Modified: trunk/openutils-hibernate-security/src/test/resources/database.properties =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/database.properties 2007-08-31 12:28:50 UTC (rev 424) +++ trunk/openutils-hibernate-security/src/test/resources/database.properties 2007-08-31 12:29:23 UTC (rev 425) @@ -2,10 +2,11 @@ # i file per la configurazione del db utilizzati dall'applicazione web sono in # src/main/web-app/WEB-INF -hibernate.connection.driver=org.apache.derby.jdbc.EmbeddedDriver -hibernate.dialect=org.hibernate.dialect.DerbyDialect -hibernate.connection.username=ikam +#hibernate.connection.driver=org.apache.derby.jdbc.EmbeddedDriver +#hibernate.dialect=org.hibernate.dialect.DerbyDialect +hibernate.connection.driver=org.hsqldb.jdbcDriver +hibernate.dialect=org.hibernate.dialect.HSQLDialect +hibernate.connection.username=sa hibernate.connection.password= -hibernate.connection.url=jdbc:derby:target/db/openutils-usermanagement-db-test;create=true -hibernate.hbm2ddl.auto=update - +hibernate.connection.url=jdbc:hsqldb:mem:hibernate-security +hibernate.hbm2ddl.auto=create-drop Modified: trunk/openutils-hibernate-security/src/test/resources/hibernate.cfg.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/hibernate.cfg.xml 2007-08-31 12:28:50 UTC (rev 424) +++ trunk/openutils-hibernate-security/src/test/resources/hibernate.cfg.xml 2007-08-31 12:29:23 UTC (rev 425) @@ -4,6 +4,9 @@ <hibernate-configuration> <session-factory> <mapping class="it.openutils.hibernate.security.dataobject.SecurityRule" /> - <mapping class="it.openutils.hibernate.security.apptest.DummyDataobject" /> + <mapping class="it.openutils.hibernate.security.apptest.DummyDataobject" /> + <mapping class="it.openutils.usermanagement.dataobjects.User" /> + <mapping class="it.openutils.usermanagement.dataobjects.Group" /> + <mapping class="it.openutils.usermanagement.dataobjects.Role" /> </session-factory> </hibernate-configuration> \ No newline at end of file Modified: trunk/openutils-hibernate-security/src/test/resources/spring-dao.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-dao.xml 2007-08-31 12:28:50 UTC (rev 424) +++ trunk/openutils-hibernate-security/src/test/resources/spring-dao.xml 2007-08-31 12:29:23 UTC (rev 425) @@ -1,7 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> -<beans> +<beans> + <bean id="userDAO" parent="txProxyTemplate"> + <property name="target"> + <bean class="it.openutils.usermanagement.dao.UserDAOImpl"> + <property name="sessionFactory" ref="sessionFactory" /> + </bean> + </property> + </bean> <bean id="securityRuleDAO" parent="txProxyTemplate"> <property name="target"> <bean class="it.openutils.hibernate.security.dao.impl.SecurityRuleDAOImpl"> Modified: trunk/openutils-hibernate-security/src/test/resources/spring-hibernate.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-hibernate.xml 2007-08-31 12:28:50 UTC (rev 424) +++ trunk/openutils-hibernate-security/src/test/resources/spring-hibernate.xml 2007-08-31 12:29:23 UTC (rev 425) @@ -19,7 +19,7 @@ <prop key="hibernate.generate_statistics">false</prop> <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop> <prop key="hibernate.show_sql">false</prop> - <prop key="hibernate.use_sql_comments">false</prop> + <prop key="hibernate.use_sql_comments">true</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> </props> </property> Modified: trunk/openutils-hibernate-security/src/test/resources/spring-security.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-security.xml 2007-08-31 12:28:50 UTC (rev 424) +++ trunk/openutils-hibernate-security/src/test/resources/spring-security.xml 2007-08-31 12:29:23 UTC (rev 425) @@ -17,5 +17,28 @@ <value>securityInterceptor</value> </list> </property> - </bean> + </bean> + + <bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.ShaPasswordEncoder" /> + <bean id="userDetailsService" class="it.openutils.usermanagement.acegi.HibernateUserDetailsServiceImpl" + autowire="byType"> + <property name="userDao" ref="userDAO" /> + </bean> + <bean id="authenticationProvider" class="org.springframework.aop.framework.ProxyFactoryBean" lazy-init="true"> + <property name="targetName" value="authenticationProviderDB" /> + </bean> + <bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter" /> + <bean id="accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased"> + <property name="allowIfAllAbstainDecisions" value="false" /> + <property name="decisionVoters"> + <list> + <ref bean="roleVoter" /> + </list> + </property> + </bean> + <bean id="authenticationProviderDB" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider" + lazy-init="true"> + <property name="userDetailsService" ref="userDetailsService" /> + <property name="passwordEncoder" ref="passwordEncoder" /> + </bean> </beans> Modified: trunk/openutils-hibernate-security/src/test/resources/spring-tests.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-tests.xml 2007-08-31 12:28:50 UTC (rev 424) +++ trunk/openutils-hibernate-security/src/test/resources/spring-tests.xml 2007-08-31 12:29:23 UTC (rev 425) @@ -6,6 +6,4 @@ <import resource="classpath:spring-dao.xml" /> <import resource="classpath:spring-managers.xml" /> <import resource="classpath:spring-security.xml" /> - - </beans> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fc...@us...> - 2007-08-31 17:03:28
|
Revision: 426 http://openutils.svn.sourceforge.net/openutils/?rev=426&view=rev Author: fcarone Date: 2007-08-31 10:03:23 -0700 (Fri, 31 Aug 2007) Log Message: ----------- Trying to inject security with an aop advice Modified Paths: -------------- trunk/openutils-hibernate-security/pom.xml trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml trunk/openutils-hibernate-security/src/test/resources/database.properties trunk/openutils-hibernate-security/src/test/resources/log4j.xml trunk/openutils-hibernate-security/src/test/resources/spring-security.xml Added Paths: ----------- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/AOPSecurity.java Modified: trunk/openutils-hibernate-security/pom.xml =================================================================== --- trunk/openutils-hibernate-security/pom.xml 2007-08-31 12:29:23 UTC (rev 425) +++ trunk/openutils-hibernate-security/pom.xml 2007-08-31 17:03:23 UTC (rev 426) @@ -1,20 +1,20 @@ -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> +<?xml version="1.0"?> +<project> <parent> + <artifactId>openutils</artifactId> <groupId>net.sourceforge.openutils</groupId> - <artifactId>openutils</artifactId> <version>3</version> <relativePath>..</relativePath> </parent> + <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-hibernate-security</artifactId> - <packaging>jar</packaging> <name>openutils-hibernate-security</name> <version>0.0.1-SNAPSHOT</version> <description>Hibernate Security classes</description> <properties> <spring.version>2.0.6</spring.version> + <aspectj.version>1.5.3</aspectj.version> </properties> <dependencies> <dependency> @@ -38,6 +38,48 @@ <version>${spring.version}</version> </dependency> <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-hibernate3</artifactId> + <version>${spring.version}</version> + <exclusions> + <exclusion> + <!-- already imported cglib-nodep by spring --> + <groupId>cglib</groupId> + <artifactId>cglib</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>aspectj</groupId> + <artifactId>aspectjrt</artifactId> + <version>${aspectj.version}</version> + </dependency> + <dependency> + <groupId>aspectj</groupId> + <artifactId>aspectjweaver</artifactId> + <version>${aspectj.version}</version> + </dependency> + <dependency> + <groupId>cglib</groupId> + <artifactId>cglib-nodep</artifactId> + <version>2.1_3</version> + </dependency> + <dependency> + <groupId>asm</groupId> + <artifactId>asm</artifactId> + <version>2.2.3</version> + </dependency> + <dependency> + <groupId>asm</groupId> + <artifactId>asm-attrs</artifactId> + <version>2.2.3</version> + </dependency> + <dependency> + <groupId>asm</groupId> + <artifactId>asm-commons</artifactId> + <version>2.2.3</version> + </dependency> + <dependency> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-usermanagement</artifactId> <version>1.1.1</version> @@ -67,11 +109,25 @@ <groupId>org.hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.2.3.ga</version> + <exclusions> + <exclusion> + <!-- already imported cglib-nodep by spring --> + <groupId>cglib</groupId> + <artifactId>cglib</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <version>3.2.1.ga</version> + <exclusions> + <exclusion> + <!-- already imported cglib-nodep by spring --> + <groupId>cglib</groupId> + <artifactId>cglib</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>commons-dbcp</groupId> @@ -100,34 +156,28 @@ <version>1.0.3</version> <exclusions> <exclusion> + <artifactId>spring-remoting</artifactId> <groupId>org.springframework</groupId> - <artifactId>spring-remoting</artifactId> </exclusion> <exclusion> + <artifactId>spring-jdbc</artifactId> <groupId>org.springframework</groupId> - <artifactId>spring-jdbc</artifactId> </exclusion> <exclusion> + <artifactId>spring-support</artifactId> <groupId>org.springframework</groupId> - <artifactId>spring-support</artifactId> </exclusion> <exclusion> + <artifactId>logkit</artifactId> <groupId>logkit</groupId> - <artifactId>logkit</artifactId> </exclusion> <exclusion> + <artifactId>avalon-framework</artifactId> <groupId>avalon-framework</groupId> - <artifactId>avalon-framework</artifactId> </exclusion> </exclusions> </dependency> <dependency> - <groupId>org.apache.derby</groupId> - <artifactId>derby</artifactId> - <version>10.2.2.0</version> - <scope>test</scope> - </dependency> - <dependency> <groupId>hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>1.8.0.7</version> Added: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/AOPSecurity.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/AOPSecurity.java (rev 0) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/AOPSecurity.java 2007-08-31 17:03:23 UTC (rev 426) @@ -0,0 +1,49 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.hibernate.security.aop; + +import java.util.List; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.hibernate.criterion.Criterion; +import org.hibernate.criterion.Restrictions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * @author fcarone + * @version $Id: $ + */ +@Aspect +public class AOPSecurity +{ + + /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(AOPSecurity.class); + + /** + * @param pjp The proceeding joinpoint + * @param filter The entity we are going to filter + * @param additionalCriteria The additional criteria list + * @return The execution invocation result + * @throws Throwable Any exception occurring in the invoked method + */ +// @Around("execution(* findFiltered(Object, .., java.util.List<org.hibernate.criterion.Criterion>)) && " + // +// " args(filter, .., additionalCriteria)") + @Around("execution(* it.openutils.dao.hibernate.*.*(Object, .., java.util.List<org.hibernate.criterion.Criterion>)) && " + // + " args(filter, .., additionalCriteria)") + public Object applySecurityRules(ProceedingJoinPoint pjp, Object filter, List<Criterion> additionalCriteria) + throws Throwable + { + log.debug("applying rules for {} with criteria {}", filter.toString(), additionalCriteria); + additionalCriteria.add(Restrictions.sqlRestriction("INTVALUE = 1")); + Object result = pjp.proceed(); + return result; + } +} Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java 2007-08-31 12:29:23 UTC (rev 425) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java 2007-08-31 17:03:23 UTC (rev 426) @@ -45,6 +45,7 @@ @SuppressWarnings("unchecked") public Object invoke(MethodInvocation invocation) throws Throwable { + log.debug("Applying security rules"); Object[] arguments = invocation.getArguments(); Object checkArgument = arguments[arguments.length - 1]; if (!StringUtils.equals(invocation.getMethod().getName(), "findFiltered")) @@ -93,7 +94,12 @@ { grantedRoles += authorities[i].getAuthority() + " "; } - log.error("Access is denied for entity {}, and roles {}", entity, grantedRoles); + log.warn("Access is denied on " + entity + ", for user {} with roles {}", SecurityContextHolder + .getContext() + .getAuthentication() + .getPrincipal() + .toString(), grantedRoles); + throw new SecurityException("Access denied"); } @@ -130,5 +136,4 @@ this.sessionFactory = sessionFactory; } - } Modified: trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java =================================================================== --- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java 2007-08-31 12:29:23 UTC (rev 425) +++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java 2007-08-31 17:03:23 UTC (rev 426) @@ -50,21 +50,24 @@ return connection; } + private void authenticate(String username, String password) + { + AuthenticationProvider authenticationProvider = (AuthenticationProvider) ctx.getBean("authenticationProvider"); + Authentication authentication = new UsernamePasswordAuthenticationToken(username, password); + authentication = authenticationProvider.authenticate(authentication); + SecurityContextImpl sci = new SecurityContextImpl(); + sci.setAuthentication(authentication); + SecurityContextHolder.setContext(sci); + } - /** * @throws Exception Any exception */ @Test - public void testRulesApplication() throws Exception + public void testFindFiltered() throws Exception { // emulate authentication - AuthenticationProvider authenticationProvider = (AuthenticationProvider) ctx.getBean("authenticationProvider"); - Authentication authentication = new UsernamePasswordAuthenticationToken("UserUno", "password"); - authentication = authenticationProvider.authenticate(authentication); - SecurityContextImpl sci = new SecurityContextImpl(); - sci.setAuthentication(authentication); - SecurityContextHolder.setContext(sci); + authenticate("UserUno", "password"); // test securedObject = (DummyDAO) ctx.getBean("dummyDAO"); @@ -77,6 +80,12 @@ 0, new ArrayList<Criterion>()); Assert.assertNotNull(dummyObjects); + Assert.assertEquals(1, dummyObjects.size()); + + dummyObjects = securedObject.findFiltered(filter); + Assert.assertNotNull(dummyObjects); + Assert.assertEquals(1, dummyObjects.size()); + } } Modified: trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml 2007-08-31 12:29:23 UTC (rev 425) +++ trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml 2007-08-31 17:03:23 UTC (rev 426) @@ -9,6 +9,7 @@ <column>EMAIL</column> <row> <value>UserUno</value> + <!-- sha1 for 'password' --> <value>5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8</value> <value>1</value> <value>Gino</value> @@ -17,7 +18,8 @@ </row> <row> <value>UserDue</value> - <value>password</value> + <!-- sha1 for 'password' --> + <value>5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8</value> <value>1</value> <value>Mario</value> <value>Verdi</value> Modified: trunk/openutils-hibernate-security/src/test/resources/database.properties =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/database.properties 2007-08-31 12:29:23 UTC (rev 425) +++ trunk/openutils-hibernate-security/src/test/resources/database.properties 2007-08-31 17:03:23 UTC (rev 426) @@ -10,3 +10,4 @@ hibernate.connection.password= hibernate.connection.url=jdbc:hsqldb:mem:hibernate-security hibernate.hbm2ddl.auto=create-drop +hibernate.show_sql=true Modified: trunk/openutils-hibernate-security/src/test/resources/log4j.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/log4j.xml 2007-08-31 12:29:23 UTC (rev 425) +++ trunk/openutils-hibernate-security/src/test/resources/log4j.xml 2007-08-31 17:03:23 UTC (rev 426) @@ -37,6 +37,9 @@ </category> <category name="it.openutils.dbupdate.DbSetupManagerImpl"> <priority value="INFO" /> + </category> + <category name="it.openutils.hibernate.security.aop"> + <priority value="DEBUG" /> </category> <root> <priority value="debug" /> Modified: trunk/openutils-hibernate-security/src/test/resources/spring-security.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-security.xml 2007-08-31 12:29:23 UTC (rev 425) +++ trunk/openutils-hibernate-security/src/test/resources/spring-security.xml 2007-08-31 17:03:23 UTC (rev 426) @@ -1,25 +1,33 @@ <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" -"http://www.springframework.org/dtd/spring-beans.dtd"> -<beans> - <bean id="securityInterceptor" class="it.openutils.hibernate.security.aop.HibernateDAOSecurityInterceptor"> - <property name="securityRuleManager" ref="securityRuleManager" /> - <property name="sessionFactory" ref="sessionFactory" /> - </bean> - <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> - <property name="beanNames"> - <list> - <idref bean="dummyDAO" /> - </list> - </property> - <property name="interceptorNames"> - <list> - <value>securityInterceptor</value> - </list> - </property> +<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" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> + + <aop:aspectj-autoproxy/> + + <bean id="securityAspect" class="it.openutils.hibernate.security.aop.AOPSecurity" /> + + <bean id="securityInterceptor" class="it.openutils.hibernate.security.aop.HibernateDAOSecurityInterceptor"> + <property name="securityRuleManager" ref="securityRuleManager" /> + <property name="sessionFactory" ref="sessionFactory" /> </bean> - - <bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.ShaPasswordEncoder" /> + +<!-- + <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> + <property name="beanNames"> + <list> + <idref bean="dummyDAO" /> + </list> + </property> + <property name="interceptorNames"> + <list> + <value>securityInterceptor</value> + </list> + </property> + </bean> + --> + + <bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.ShaPasswordEncoder" /> <bean id="userDetailsService" class="it.openutils.usermanagement.acegi.HibernateUserDetailsServiceImpl" autowire="byType"> <property name="userDao" ref="userDAO" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fc...@us...> - 2007-09-03 09:00:57
|
Revision: 429 http://openutils.svn.sourceforge.net/openutils/?rev=429&view=rev Author: fcarone Date: 2007-09-03 01:31:00 -0700 (Mon, 03 Sep 2007) Log Message: ----------- AOP security sample application works Modified Paths: -------------- trunk/openutils-hibernate-security/pom.xml trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/AOPSecurity.java trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/HsqlDatatypeFactory.java trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDaoImpl.java trunk/openutils-hibernate-security/src/test/resources/spring-database.xml trunk/openutils-hibernate-security/src/test/resources/spring-hibernate.xml trunk/openutils-hibernate-security/src/test/resources/spring-security.xml Removed Paths: ------------- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java Modified: trunk/openutils-hibernate-security/pom.xml =================================================================== --- trunk/openutils-hibernate-security/pom.xml 2007-09-03 08:24:39 UTC (rev 428) +++ trunk/openutils-hibernate-security/pom.xml 2007-09-03 08:31:00 UTC (rev 429) @@ -92,7 +92,7 @@ <dependency> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-bshd5</artifactId> - <version>1.0.7</version> + <version>1.0.8-SNAPSHOT</version> </dependency> <dependency> <groupId>net.sourceforge.openutils</groupId> Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/AOPSecurity.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/AOPSecurity.java 2007-09-03 08:24:39 UTC (rev 428) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/AOPSecurity.java 2007-09-03 08:31:00 UTC (rev 429) @@ -3,11 +3,20 @@ */ package it.openutils.hibernate.security.aop; +import it.openutils.hibernate.security.dataobject.SecurityRule; +import it.openutils.hibernate.security.services.SecurityRuleManager; + +import java.util.ArrayList; import java.util.List; +import org.acegisecurity.Authentication; +import org.acegisecurity.GrantedAuthority; +import org.acegisecurity.context.SecurityContextHolder; +import org.apache.commons.lang.StringUtils; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; +import org.hibernate.Filter; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Restrictions; import org.slf4j.Logger; @@ -27,23 +36,107 @@ */ private Logger log = LoggerFactory.getLogger(AOPSecurity.class); + private SecurityRuleManager securityRuleManager; + + private List<String> securedDAOs; + + private boolean enabled; + /** * @param pjp The proceeding joinpoint * @param filter The entity we are going to filter - * @param additionalCriteria The additional criteria list + * @param additionalCriteria The additional criteria list, cannot be null * @return The execution invocation result * @throws Throwable Any exception occurring in the invoked method */ -// @Around("execution(* findFiltered(Object, .., java.util.List<org.hibernate.criterion.Criterion>)) && " + // -// " args(filter, .., additionalCriteria)") - @Around("execution(* it.openutils.dao.hibernate.*.*(Object, .., java.util.List<org.hibernate.criterion.Criterion>)) && " + // - " args(filter, .., additionalCriteria)") - public Object applySecurityRules(ProceedingJoinPoint pjp, Object filter, List<Criterion> additionalCriteria) + @Around("execution(* it.openutils.dao.hibernate.*.*(Object, .., java.util.List<org.hibernate.criterion.Criterion>)) && " + + // + " args(filter, .., additionalCriteria)") + public Object applySecurityRules(ProceedingJoinPoint pjp, Object filter, List<Criterion> additionalCriteria) throws Throwable { - log.debug("applying rules for {} with criteria {}", filter.toString(), additionalCriteria); - additionalCriteria.add(Restrictions.sqlRestriction("INTVALUE = 1")); + if (!enabled) + { + log.debug("DAO security disabled, proceeding."); + return pjp.proceed(); + } + + if (!securedDAOs.contains(pjp.getTarget().getClass().getCanonicalName())) + { + log.debug("The intercepted DAO {} is not secured, proceeding.", pjp.getTarget().toString()); + return pjp.proceed(); + } + + log.debug("applying security rules for {} with criteria {}", filter.toString(), additionalCriteria); + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication == null) + { + throw new SecurityException("Authentication is not valid"); + } + GrantedAuthority[] authorities = authentication.getAuthorities(); + List<String> roles = new ArrayList<String>(); + for (int i = 0; i < authorities.length; i++) + { + roles.add(authorities[i].getAuthority()); + } + + String entity = filter.getClass().getCanonicalName(); + List<SecurityRule> rules = securityRuleManager.getRulesForRoles(entity, roles); + + if (rules.isEmpty()) + { + String grantedRoles = StringUtils.EMPTY; + for (int i = 0; i < authorities.length; i++) + { + grantedRoles += authorities[i].getAuthority() + " "; + } + log.warn("Access is denied on " + entity + ", for user {} with roles {}", SecurityContextHolder + .getContext() + .getAuthentication() + .getPrincipal() + .toString(), grantedRoles); + + throw new SecurityException("Access denied"); + } + + Filter hibernateFilter = securityRuleManager.getEntityFilterFromRules(entity, rules); + + Criterion sqlCriterion = Restrictions.sqlRestriction(hibernateFilter + .getFilterDefinition() + .getDefaultFilterCondition()); + + log.debug("Adding sql restriction: {}", sqlCriterion.toString()); + additionalCriteria.add(sqlCriterion); + Object result = pjp.proceed(); return result; } + + /** + * Sets the securityRuleManager. + * @param securityRuleManager the securityRuleManager to set + */ + public void setSecurityRuleManager(SecurityRuleManager securityRuleManager) + { + this.securityRuleManager = securityRuleManager; + } + + /** + * Sets the securedDAOs. + * @param securedDAOs the securedDAOs to set + */ + public void setSecuredDAOs(List securedDAOs) + { + this.securedDAOs = securedDAOs; + } + + + /** + * Sets the enabled. + * @param enabled the enabled to set + */ + public void setEnabled(boolean enabled) + { + this.enabled = enabled; + } } Deleted: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java 2007-09-03 08:24:39 UTC (rev 428) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/HibernateDAOSecurityInterceptor.java 2007-09-03 08:31:00 UTC (rev 429) @@ -1,139 +0,0 @@ -/* - * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it - */ -package it.openutils.hibernate.security.aop; - -import it.openutils.hibernate.security.dataobject.SecurityRule; -import it.openutils.hibernate.security.services.SecurityRuleManager; - -import java.util.ArrayList; -import java.util.List; - -import org.acegisecurity.GrantedAuthority; -import org.acegisecurity.context.SecurityContextHolder; -import org.aopalliance.intercept.MethodInterceptor; -import org.aopalliance.intercept.MethodInvocation; -import org.apache.commons.lang.StringUtils; -import org.hibernate.Filter; -import org.hibernate.SessionFactory; -import org.hibernate.criterion.Criterion; -import org.hibernate.criterion.Restrictions; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - - -/** - * This is a Hibernate Read-Update-Delete security interceptor. This enforces a DENY_ALL default policy. - * @author fcarone - * @version $Id: $ - */ -public class HibernateDAOSecurityInterceptor implements MethodInterceptor -{ - - /** - * Logger. - */ - private Logger log = LoggerFactory.getLogger(HibernateDAOSecurityInterceptor.class); - - private SecurityRuleManager securityRuleManager; - - private SessionFactory sessionFactory; - - /** - * {@inheritDoc} - */ - @SuppressWarnings("unchecked") - public Object invoke(MethodInvocation invocation) throws Throwable - { - log.debug("Applying security rules"); - Object[] arguments = invocation.getArguments(); - Object checkArgument = arguments[arguments.length - 1]; - if (!StringUtils.equals(invocation.getMethod().getName(), "findFiltered")) - { - return invocation.proceed(); - } - if (!(checkArgument instanceof List)) - { - return invocation.proceed(); - } - - String entity = StringUtils.EMPTY; - for (int i = 0; i < arguments.length; i++) - { - Object argument = arguments[i]; - if (sessionFactory.getClassMetadata(argument.getClass()) != null) - { - entity = argument.getClass().getCanonicalName(); - break; - } - } - - // the current invocation is not about any session managed entity - if (StringUtils.isEmpty(entity)) - { - return invocation.proceed(); - } - - if (SecurityContextHolder.getContext().getAuthentication() == null) - { - throw new SecurityException("Authentication is not valid"); - } - - GrantedAuthority[] authorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities(); - List<String> roles = new ArrayList<String>(); - for (int i = 0; i < authorities.length; i++) - { - roles.add(authorities[i].getAuthority()); - } - List<SecurityRule> rules = securityRuleManager.getRulesForRoles(entity, roles); - - if (rules.isEmpty()) - { - String grantedRoles = StringUtils.EMPTY; - for (int i = 0; i < authorities.length; i++) - { - grantedRoles += authorities[i].getAuthority() + " "; - } - log.warn("Access is denied on " + entity + ", for user {} with roles {}", SecurityContextHolder - .getContext() - .getAuthentication() - .getPrincipal() - .toString(), grantedRoles); - - throw new SecurityException("Access denied"); - } - - Filter filter = securityRuleManager.getEntityFilterFromRules(entity, rules); - - Criterion sqlCriterion = Restrictions.sqlRestriction(filter.getFilterDefinition().getDefaultFilterCondition()); - - if (StringUtils.equals(invocation.getMethod().getName(), "findFiltered")) - { - Object argument = arguments[arguments.length - 1]; - ((List) argument).add(sqlCriterion); - } - - Object result = invocation.proceed(); - - return result; - } - - /** - * Sets the securityRuleManager. - * @param securityRuleManager the securityRuleManager to set - */ - public void setSecurityRuleManager(SecurityRuleManager securityRuleManager) - { - this.securityRuleManager = securityRuleManager; - } - - /** - * Sets the sessionFactory. - * @param sessionFactory the sessionFactory to set - */ - public void setSessionFactory(SessionFactory sessionFactory) - { - this.sessionFactory = sessionFactory; - } - -} Modified: trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/HsqlDatatypeFactory.java =================================================================== --- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/HsqlDatatypeFactory.java 2007-09-03 08:24:39 UTC (rev 428) +++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/HsqlDatatypeFactory.java 2007-09-03 08:31:00 UTC (rev 429) @@ -19,6 +19,7 @@ /** * {@inheritDoc} + * Needed to fix Boolean type recognition for HSQLDB */ @Override public DataType createDataType(int sqlType, String sqlTypeName) throws DataTypeException Modified: trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDaoImpl.java =================================================================== --- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDaoImpl.java 2007-09-03 08:24:39 UTC (rev 428) +++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/apptest/DummyDaoImpl.java 2007-09-03 08:31:00 UTC (rev 429) @@ -20,6 +20,6 @@ protected Class<DummyDataobject> getReferenceClass() { return DummyDataobject.class; + } - } Modified: trunk/openutils-hibernate-security/src/test/resources/spring-database.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-database.xml 2007-09-03 08:24:39 UTC (rev 428) +++ trunk/openutils-hibernate-security/src/test/resources/spring-database.xml 2007-09-03 08:31:00 UTC (rev 429) @@ -1,10 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> -<!-- - # ATTENZIONE: queste proprietà sono utilizzate solo per gli unit tests - # i file per la configurazione del db utilizzati dall'applicazione web sono in - # src/main/web-app/WEB-INF ---> + <beans> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> Modified: trunk/openutils-hibernate-security/src/test/resources/spring-hibernate.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-hibernate.xml 2007-09-03 08:24:39 UTC (rev 428) +++ trunk/openutils-hibernate-security/src/test/resources/spring-hibernate.xml 2007-09-03 08:31:00 UTC (rev 429) @@ -42,6 +42,7 @@ <prop key="clean*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> - </property> + </property> + <property name="exposeProxy" value="true" /> </bean> </beans> \ No newline at end of file Modified: trunk/openutils-hibernate-security/src/test/resources/spring-security.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-security.xml 2007-09-03 08:24:39 UTC (rev 428) +++ trunk/openutils-hibernate-security/src/test/resources/spring-security.xml 2007-09-03 08:31:00 UTC (rev 429) @@ -2,31 +2,16 @@ <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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> - - <aop:aspectj-autoproxy/> - - <bean id="securityAspect" class="it.openutils.hibernate.security.aop.AOPSecurity" /> - - <bean id="securityInterceptor" class="it.openutils.hibernate.security.aop.HibernateDAOSecurityInterceptor"> + <aop:aspectj-autoproxy /> + <bean id="securityAspect" class="it.openutils.hibernate.security.aop.AOPSecurity"> <property name="securityRuleManager" ref="securityRuleManager" /> - <property name="sessionFactory" ref="sessionFactory" /> - </bean> - -<!-- - <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> - <property name="beanNames"> + <property name="enabled" value="true" /> + <property name="securedDAOs"> <list> - <idref bean="dummyDAO" /> + <value>it.openutils.hibernate.security.apptest.DummyDaoImpl</value> </list> </property> - <property name="interceptorNames"> - <list> - <value>securityInterceptor</value> - </list> - </property> </bean> - --> - <bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.ShaPasswordEncoder" /> <bean id="userDetailsService" class="it.openutils.usermanagement.acegi.HibernateUserDetailsServiceImpl" autowire="byType"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fc...@us...> - 2007-11-14 14:16:37
|
Revision: 506 http://openutils.svn.sourceforge.net/openutils/?rev=506&view=rev Author: fcarone Date: 2007-11-14 06:16:35 -0800 (Wed, 14 Nov 2007) Log Message: ----------- update to latest junit testing package Modified Paths: -------------- trunk/openutils-hibernate-security/pom.xml trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java Modified: trunk/openutils-hibernate-security/pom.xml =================================================================== --- trunk/openutils-hibernate-security/pom.xml 2007-11-12 15:19:27 UTC (rev 505) +++ trunk/openutils-hibernate-security/pom.xml 2007-11-14 14:16:35 UTC (rev 506) @@ -97,7 +97,7 @@ <dependency> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-testing-junit</artifactId> - <version>1.1.2</version> + <version>1.1.3</version> <scope>test</scope> </dependency> <dependency> Modified: trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java =================================================================== --- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java 2007-11-12 15:19:27 UTC (rev 505) +++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java 2007-11-14 14:16:35 UTC (rev 506) @@ -80,7 +80,7 @@ 0, new ArrayList<Criterion>()); Assert.assertNotNull(dummyObjects); - Assert.assertEquals(1, dummyObjects.size()); +// Assert.assertEquals(1, dummyObjects.size()); dummyObjects = securedObject.findFiltered(filter); Assert.assertNotNull(dummyObjects); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fc...@us...> - 2008-02-19 15:37:09
|
Revision: 640 http://openutils.svn.sourceforge.net/openutils/?rev=640&view=rev Author: fcarone Date: 2008-02-19 07:36:46 -0800 (Tue, 19 Feb 2008) Log Message: ----------- SecurityIntegrationTest updated Modified Paths: -------------- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/AOPSecurity.java trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAccessDecisionVoter.java trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml trunk/openutils-hibernate-security/src/test/resources/log4j.xml trunk/openutils-hibernate-security/src/test/resources/spring-dao.xml trunk/openutils-hibernate-security/src/test/resources/spring-database.xml trunk/openutils-hibernate-security/src/test/resources/spring-hibernate.xml trunk/openutils-hibernate-security/src/test/resources/spring-managers.xml trunk/openutils-hibernate-security/src/test/resources/spring-security.xml trunk/openutils-hibernate-security/src/test/resources/spring-tests.xml Property Changed: ---------------- trunk/openutils-hibernate-security/ Property changes on: trunk/openutils-hibernate-security ___________________________________________________________________ Name: svn:ignore - target .settings .checkstyle .classpath .project derby.log + target .settings .checkstyle .classpath .project derby.log test-output Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/AOPSecurity.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/AOPSecurity.java 2008-02-19 15:34:28 UTC (rev 639) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/aop/AOPSecurity.java 2008-02-19 15:36:46 UTC (rev 640) @@ -1,5 +1,17 @@ /* - * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + * Copyright Openmind http://www.openmindonline.it + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package it.openutils.hibernate.security.aop; Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAccessDecisionVoter.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAccessDecisionVoter.java 2008-02-19 15:34:28 UTC (rev 639) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAccessDecisionVoter.java 2008-02-19 15:36:46 UTC (rev 640) @@ -32,7 +32,6 @@ import org.acegisecurity.vote.AccessDecisionVoter; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.enums.EnumUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.aop.framework.ReflectiveMethodInvocation; Modified: trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java =================================================================== --- trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java 2008-02-19 15:34:28 UTC (rev 639) +++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java 2008-02-19 15:36:46 UTC (rev 640) @@ -3,24 +3,31 @@ import it.openutils.hibernate.example.FilterMetadata; import it.openutils.hibernate.security.apptest.DummyDAO; import it.openutils.hibernate.security.apptest.DummyDataobject; -import it.openutils.testing.junit.DbUnitTestCase; +import it.openutils.hibernate.security.apptest.DummyObjectManager; +import it.openutils.testing.DbUnitExecution; +import it.openutils.testing.junit.AbstractDbUnitJunitSpringContextTests; -import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import org.acegisecurity.AccessDeniedException; import org.acegisecurity.Authentication; import org.acegisecurity.context.SecurityContextHolder; import org.acegisecurity.context.SecurityContextImpl; import org.acegisecurity.providers.AuthenticationProvider; import org.acegisecurity.providers.UsernamePasswordAuthenticationToken; -import org.dbunit.database.DatabaseConfig; -import org.dbunit.database.IDatabaseConnection; +import org.dbunit.operation.InsertOperation; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Order; import org.junit.Assert; import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.transaction.TransactionConfiguration; +import org.springframework.test.context.transaction.TransactionalTestExecutionListener; +import org.springframework.transaction.annotation.Transactional; /* @@ -31,28 +38,27 @@ * @author fcarone * @version $Id: $ */ -public class SecurityIntegrationTest extends DbUnitTestCase +@ContextConfiguration(locations = {"/spring-tests.xml" }) +@DbUnitExecution(datasets = {"/SecurityIntegrationTest-load.xml" }, dataSource = "dataSource", // + dataTypeFactory = HsqlDatatypeFactory.class, + insertOperation = InsertOperation.class) +@TestExecutionListeners({TransactionalTestExecutionListener.class }) +@Transactional +@TransactionConfiguration(transactionManager = "transactionManager") +public class SecurityIntegrationTest extends AbstractDbUnitJunitSpringContextTests { + @Autowired private DummyDAO securedObject; + @Autowired + private AuthenticationProvider authenticationProvider; + @Autowired + private DummyObjectManager dummyObjectManager; - /** - * {@inheritDoc} - */ - @Override - protected IDatabaseConnection createConnection() throws SQLException - { - IDatabaseConnection connection = super.createConnection(); - DatabaseConfig config = connection.getConfig(); - config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqlDatatypeFactory()); - return connection; - } - private void authenticate(String username, String password) { - AuthenticationProvider authenticationProvider = (AuthenticationProvider) ctx.getBean("authenticationProvider"); Authentication authentication = new UsernamePasswordAuthenticationToken(username, password); authentication = authenticationProvider.authenticate(authentication); SecurityContextImpl sci = new SecurityContextImpl(); @@ -70,7 +76,6 @@ authenticate("UserUno", "password"); // test - securedObject = (DummyDAO) ctx.getBean("dummyDAO"); DummyDataobject filter = new DummyDataobject(); List<DummyDataobject> dummyObjects = securedObject.findFiltered( filter, @@ -80,11 +85,134 @@ 0, new ArrayList<Criterion>()); Assert.assertNotNull(dummyObjects); + Assert.assertEquals(1, dummyObjects.size()); dummyObjects = securedObject.findFiltered(filter); Assert.assertNotNull(dummyObjects); Assert.assertEquals(1, dummyObjects.size()); + } + /** + * @throws Exception Any exception + */ + @Test + public void testUpdateOK() throws Exception + { + authenticate("UserUno", "password"); + DummyDataobject filter = new DummyDataobject(); + List<DummyDataobject> dummyObjects = securedObject.findFiltered(filter); + Assert.assertNotNull(dummyObjects); + DummyDataobject ddo = dummyObjects.get(0); + + ddo.setStringValue("ModifiedValue"); + + dummyObjectManager.update(ddo); } + /** + * @throws Exception Any exception + */ + @Test(expected = AccessDeniedException.class) + public void testUpdateNoGo() throws Exception + { + authenticate("UserDue", "password"); + DummyDataobject filter = new DummyDataobject(); + List<DummyDataobject> dummyObjects = securedObject.findFiltered(filter); + Assert.assertNotNull(dummyObjects); + DummyDataobject ddo = dummyObjects.get(0); + + ddo.setStringValue("ModifiedValue"); + + dummyObjectManager.update(ddo); + } + + /** + * @throws Exception Any exception + */ + @Test + public void testDeleteOk() throws Exception + { + authenticate("UserUno", "password"); + DummyDataobject filter = new DummyDataobject(); + List<DummyDataobject> dummyObjects = securedObject.findFiltered(filter); + Assert.assertNotNull(dummyObjects); + DummyDataobject ddo = dummyObjects.get(0); + + dummyObjectManager.delete(ddo); + } + + /** + * @throws Exception Any exception + */ + @Test(expected = AccessDeniedException.class) + public void testDeleteNoGo() throws Exception + { + authenticate("UserDue", "password"); + DummyDataobject filter = new DummyDataobject(); + List<DummyDataobject> dummyObjects = securedObject.findFiltered(filter); + Assert.assertNotNull(dummyObjects); + DummyDataobject ddo = dummyObjects.get(0); + + dummyObjectManager.delete(ddo); + } + + /** + * @throws Exception Any exception + */ + @Test(expected = AccessDeniedException.class) + public void testCreateNoGo() throws Exception + { + authenticate("UserUno", "password"); + DummyDataobject filter = new DummyDataobject(); + List<DummyDataobject> dummyObjects = securedObject.findFiltered(filter); + Assert.assertNotNull(dummyObjects); + DummyDataobject ddo = dummyObjects.get(0); + + dummyObjectManager.create(ddo); + } + + /** + * @throws Exception Any exception + */ + @Test + public void testCreateOk() throws Exception + { + authenticate("UserDue", "password"); + DummyDataobject filter = new DummyDataobject(); + List<DummyDataobject> dummyObjects = securedObject.findFiltered(filter); + Assert.assertNotNull(dummyObjects); + DummyDataobject ddo = dummyObjects.get(0); + + dummyObjectManager.create(ddo); + } + + /** + * Sets the securedObject. + * @param securedObject the securedObject to set + */ + public void setSecuredObject(DummyDAO securedObject) + { + this.securedObject = securedObject; + } + + + /** + * Sets the authenticationProvider. + * @param authenticationProvider the authenticationProvider to set + */ + public void setAuthenticationProvider(AuthenticationProvider authenticationProvider) + { + this.authenticationProvider = authenticationProvider; + } + + + /** + * Sets the dummyObjectManager. + * @param dummyObjectManager the dummyObjectManager to set + */ + public void setDummyObjectManager(DummyObjectManager dummyObjectManager) + { + this.dummyObjectManager = dummyObjectManager; + } + } Modified: trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml 2008-02-19 15:34:28 UTC (rev 639) +++ trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml 2008-02-19 15:36:46 UTC (rev 640) @@ -65,7 +65,7 @@ <value>GRUPPOUNO</value> </row> <row> - <value>UserUno</value> + <value>UserDue</value> <value>GRUPPODUE</value> </row> </table> @@ -101,6 +101,22 @@ <value>1</value> <value>EQUALS</value> </row> + <row> + <value>2</value> + <value>RoleDue</value> + <value>it.openutils.hibernate.security.apptest.DummyDataobject</value> + <value>intValue</value> + <value>1</value> + <value>EQUALS</value> + </row> + <row> + <value>3</value> + <value>RoleTre</value> + <value>it.openutils.hibernate.security.apptest.DummyDataobject</value> + <value>intValue</value> + <value>1</value> + <value>EQUALS</value> + </row> </table> <table name="SECRULE_PERMISSION"> <column>ID_SECURITY_RULE</column> @@ -109,6 +125,22 @@ <value>1</value> <value>LOAD</value> </row> + <row> + <value>1</value> + <value>MODIFY</value> + </row> + <row> + <value>2</value> + <value>DELETE</value> + </row> + <row> + <value>3</value> + <value>LOAD</value> + </row> + <row> + <value>3</value> + <value>CREATE</value> + </row> </table> <table name="DUMMYDATAOBJECT"> <column>ID</column> Modified: trunk/openutils-hibernate-security/src/test/resources/log4j.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/log4j.xml 2008-02-19 15:34:28 UTC (rev 639) +++ trunk/openutils-hibernate-security/src/test/resources/log4j.xml 2008-02-19 15:36:46 UTC (rev 640) @@ -38,9 +38,12 @@ <category name="it.openutils.dbupdate.DbSetupManagerImpl"> <priority value="INFO" /> </category> - <category name="it.openutils.hibernate.security.aop"> + <category name="it.openutils.hibernate.security"> <priority value="DEBUG" /> </category> + <category name="org.acegisecurity"> + <priority value="DEBUG" /> + </category> <root> <priority value="debug" /> <appender-ref ref="test-appender" /> Modified: trunk/openutils-hibernate-security/src/test/resources/spring-dao.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-dao.xml 2008-02-19 15:34:28 UTC (rev 639) +++ trunk/openutils-hibernate-security/src/test/resources/spring-dao.xml 2008-02-19 15:36:46 UTC (rev 640) @@ -1,7 +1,7 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" -"http://www.springframework.org/dtd/spring-beans.dtd"> -<beans> +<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:util="http://www.springframework.org/schema/util" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd"> <bean id="userDAO" parent="txProxyTemplate"> <property name="target"> <bean class="it.openutils.usermanagement.dao.UserDAOImpl"> @@ -9,18 +9,19 @@ </bean> </property> </bean> - <bean id="securityRuleDAO" parent="txProxyTemplate"> - <property name="target"> - <bean class="it.openutils.hibernate.security.dao.impl.SecurityRuleDAOImpl"> - <property name="sessionFactory" ref="sessionFactory" /> - </bean> - </property> + <bean id="securityRuleDAO" parent="txProxyTemplate"> + <property name="target"> + <bean class="it.openutils.hibernate.security.dao.impl.SecurityRuleDAOImpl"> + <property name="sessionFactory" ref="sessionFactory" /> + </bean> + </property> </bean> <bean id="dummyDAO" parent="txProxyTemplate"> <property name="target"> <bean class="it.openutils.hibernate.security.apptest.DummyDaoImpl"> <property name="sessionFactory" ref="sessionFactory" /> + <property name="aopenabled" value="true" /> </bean> </property> - </bean> + </bean> </beans> \ No newline at end of file Modified: trunk/openutils-hibernate-security/src/test/resources/spring-database.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-database.xml 2008-02-19 15:34:28 UTC (rev 639) +++ trunk/openutils-hibernate-security/src/test/resources/spring-database.xml 2008-02-19 15:36:46 UTC (rev 640) @@ -1,7 +1,7 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> - -<beans> +<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:util="http://www.springframework.org/schema/util" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd"> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>classpath:database.properties</value> Modified: trunk/openutils-hibernate-security/src/test/resources/spring-hibernate.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-hibernate.xml 2008-02-19 15:34:28 UTC (rev 639) +++ trunk/openutils-hibernate-security/src/test/resources/spring-hibernate.xml 2008-02-19 15:36:46 UTC (rev 640) @@ -1,7 +1,7 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" -"http://www.springframework.org/dtd/spring-beans.dtd"> -<beans> +<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:util="http://www.springframework.org/schema/util" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd"> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> Modified: trunk/openutils-hibernate-security/src/test/resources/spring-managers.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-managers.xml 2008-02-19 15:34:28 UTC (rev 639) +++ trunk/openutils-hibernate-security/src/test/resources/spring-managers.xml 2008-02-19 15:36:46 UTC (rev 640) @@ -1,17 +1,49 @@ -<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> -<beans> - <bean id="securityRuleManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" - autowire="byType"> - <property name="transactionManager"> - <ref bean="transactionManager" /> - </property> - <property name="transactionAttributes"> - <props> - <prop key="*">PROPAGATION_REQUIRED</prop> - </props> - </property> - <property name="target"> - <bean class="it.openutils.hibernate.security.services.impl.SecurityRuleManagerImpl" autowire="byType"></bean> - </property> - </bean> +<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:util="http://www.springframework.org/schema/util" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd"> + <bean id="securityRuleManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> + <property name="transactionManager"> + <ref bean="transactionManager" /> + </property> + <property name="transactionAttributes"> + <props> + <prop key="*">PROPAGATION_REQUIRED</prop> + </props> + </property> + <property name="target"> + <bean class="it.openutils.hibernate.security.services.impl.SecurityRuleManagerImpl" autowire="byType"></bean> + </property> + </bean> + <bean id="dummyObjectManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> + <property name="transactionManager"> + <ref bean="transactionManager" /> + </property> + <property name="transactionAttributes"> + <props> + <prop key="*">PROPAGATION_REQUIRED</prop> + </props> + </property> + <property name="target"> + <bean class="it.openutils.hibernate.security.apptest.DummyObjectManagerImpl"> + <property name="dummyDAO" ref="dummyDAO" /> + </bean> + </property> + </bean> + <bean id="userManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> + <property name="transactionManager"> + <ref bean="transactionManager" /> + </property> + <property name="transactionAttributes"> + <props> + <prop key="*">PROPAGATION_REQUIRED</prop> + </props> + </property> + <property name="target"> + <bean class="it.openutils.usermanagement.manager.UserManagerImpl"> + <property name="passwordEncoder" ref="passwordEncoder" /> + <property name="userDAO" ref="userDAO" /> + </bean> + </property> + </bean> </beans> \ No newline at end of file Modified: trunk/openutils-hibernate-security/src/test/resources/spring-security.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-security.xml 2008-02-19 15:34:28 UTC (rev 639) +++ trunk/openutils-hibernate-security/src/test/resources/spring-security.xml 2008-02-19 15:36:46 UTC (rev 640) @@ -1,8 +1,11 @@ -<?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" - xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> + xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> + <aop:aspectj-autoproxy /> + <bean id="securityAspect" class="it.openutils.hibernate.security.aop.AOPSecurity"> <property name="securityRuleManager" ref="securityRuleManager" /> <property name="enabled" value="true" /> @@ -12,26 +15,60 @@ </list> </property> </bean> + <bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.ShaPasswordEncoder" /> + <bean id="userDetailsService" class="it.openutils.usermanagement.acegi.HibernateUserDetailsServiceImpl" autowire="byType"> <property name="userDao" ref="userDAO" /> </bean> - <bean id="authenticationProvider" class="org.springframework.aop.framework.ProxyFactoryBean" lazy-init="true"> - <property name="targetName" value="authenticationProviderDB" /> + + <bean id="authenticationProviderDB" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider" + lazy-init="true"> + <property name="userDetailsService" ref="userDetailsService" /> + <property name="passwordEncoder" ref="passwordEncoder" /> </bean> + + <bean id="authenticationManager" class="org.acegisecurity.MockAuthenticationManager" /> + <bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter" /> - <bean id="accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased"> + + <bean id="securityRuleVoter" class="it.openutils.hibernate.security.filter.SecurityRuleAccessDecisionVoter"> + <property name="securityRuleManager" ref="securityRuleManager" /> + </bean> + + <bean id="accessDecisionManager" class="org.acegisecurity.vote.UnanimousBased"> <property name="allowIfAllAbstainDecisions" value="false" /> <property name="decisionVoters"> <list> <ref bean="roleVoter" /> + <ref bean="securityRuleVoter" /> </list> </property> </bean> - <bean id="authenticationProviderDB" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider" - lazy-init="true"> - <property name="userDetailsService" ref="userDetailsService" /> - <property name="passwordEncoder" ref="passwordEncoder" /> + + <bean id="securityInterceptor" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor"> + <property name="authenticationManager" ref="authenticationManager" /> + <property name="accessDecisionManager" ref="accessDecisionManager" /> + <property name="objectDefinitionSource"> + <value> + it.openutils.hibernate.security.apptest.DummyObjectManager.update=MODIFY + it.openutils.hibernate.security.apptest.DummyObjectManager.create=CREATE + it.openutils.hibernate.security.apptest.DummyObjectManager.delete=DELETE + </value> + </property> </bean> + + <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> + <property name="beanNames"> + <list> + <idref bean="dummyObjectManager" /> + </list> + </property> + <property name="interceptorNames"> + <list> + <value>securityInterceptor</value> + </list> + </property> + </bean> </beans> Modified: trunk/openutils-hibernate-security/src/test/resources/spring-tests.xml =================================================================== --- trunk/openutils-hibernate-security/src/test/resources/spring-tests.xml 2008-02-19 15:34:28 UTC (rev 639) +++ trunk/openutils-hibernate-security/src/test/resources/spring-tests.xml 2008-02-19 15:36:46 UTC (rev 640) @@ -1,6 +1,8 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> -<beans> +<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:util="http://www.springframework.org/schema/util" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd"> + <import resource="classpath:spring-database.xml" /> <import resource="classpath:spring-hibernate.xml" /> <import resource="classpath:spring-dao.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |