|
From: <fc...@us...> - 2008-02-20 14:09:09
|
Revision: 658
http://openutils.svn.sourceforge.net/openutils/?rev=658&view=rev
Author: fcarone
Date: 2008-02-20 06:09:10 -0800 (Wed, 20 Feb 2008)
Log Message:
-----------
Some (heavy) refactoring
Modified Paths:
--------------
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/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
Added Paths:
-----------
trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleBaseHandler.java
trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleUtils.java
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 2008-02-20 10:38:55 UTC (rev 657)
+++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/JavaBeanFilter.java 2008-02-20 14:09:10 UTC (rev 658)
@@ -32,7 +32,6 @@
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
-import org.dbunit.dataset.csv.handlers.EscapeHandler;
import org.hibernate.Filter;
import org.hibernate.HibernateException;
import org.hibernate.engine.FilterDefinition;
@@ -149,7 +148,7 @@
startQuote = "\'";
endQuote = startQuote;
}
- else if (field.getType().getSuperclass().isAssignableFrom(Number.class))
+ else if (Number.class.isAssignableFrom(field.getType()))
{
startQuote = StringUtils.EMPTY;
endQuote = StringUtils.EMPTY;
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-20 10:38:55 UTC (rev 657)
+++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAccessDecisionVoter.java 2008-02-20 14:09:10 UTC (rev 658)
@@ -15,24 +15,14 @@
*/
package it.openutils.hibernate.security.filter;
-import it.openutils.hibernate.security.dataobject.ModifierEnum;
-import it.openutils.hibernate.security.dataobject.PermissionEnum;
import it.openutils.hibernate.security.dataobject.SecurityRule;
import it.openutils.hibernate.security.services.SecurityRuleManager;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
import java.util.List;
import org.acegisecurity.Authentication;
-import org.acegisecurity.ConfigAttribute;
import org.acegisecurity.ConfigAttributeDefinition;
-import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.vote.AccessDecisionVoter;
-import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aop.framework.ReflectiveMethodInvocation;
@@ -42,7 +32,7 @@
* @author fcarone
* @version $Id: $
*/
-public class SecurityRuleAccessDecisionVoter implements AccessDecisionVoter
+public class SecurityRuleAccessDecisionVoter extends SecurityRuleBaseHandler implements AccessDecisionVoter
{
/**
@@ -52,44 +42,14 @@
private SecurityRuleManager securityRuleManager;
- /**
- * {@inheritDoc}
- */
- public boolean supports(ConfigAttribute attribute)
- {
- log.debug("Evaluating attribute {}", attribute.getAttribute());
+ private SecurityRuleUtils ruleUtils = new SecurityRuleUtils();
- if (attribute.getAttribute() != null)
- {
- for (PermissionEnum permission : PermissionEnum.values())
- {
- if (StringUtils.equals(permission.getValue(), attribute.getAttribute()))
- {
- log.debug("Support ok.");
- return true;
- }
- }
- }
- log.debug("Not supporting attribute.");
- return false;
- }
-
/**
* {@inheritDoc}
*/
- @SuppressWarnings("unchecked")
- public boolean supports(Class clazz)
- {
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
public int vote(Authentication authentication, Object object, ConfigAttributeDefinition config)
{
- List<String> roles = new ArrayList<String>();
- roles.addAll(getRolesFromAuthentication(authentication));
+ List<String> roles = ruleUtils.getRolesFromAuthentication(authentication);
if (object instanceof ReflectiveMethodInvocation)
{
@@ -98,13 +58,13 @@
{
log.debug("Evaluating argument {}", argument);
List<SecurityRule> rules = securityRuleManager.getRulesForRoles(argument.getClass().getName(), roles);
- boolean permissionMatches = checkPermissions(rules, config);
+ boolean permissionMatches = ruleUtils.checkPermissions(rules, config);
if (!permissionMatches)
{
return ACCESS_DENIED;
}
- boolean areRulesMatching = checkRules(rules, argument);
+ boolean areRulesMatching = ruleUtils.checkRules(rules, argument);
if (!areRulesMatching)
{
return ACCESS_DENIED;
@@ -116,101 +76,6 @@
}
/**
- * @param authentication
- * @return
- */
- private Collection< ? extends String> getRolesFromAuthentication(Authentication authentication)
- {
- List<String> roles = new ArrayList<String>();
- for (GrantedAuthority authority : authentication.getAuthorities())
- {
- log.debug("Granted authority for user {}: {}", authentication.getName(), authority.getAuthority());
- roles.add(authority.getAuthority());
- }
- return roles;
- }
-
- /**
- * @param rules
- * @param argument
- * @return
- */
- private boolean checkRules(List<SecurityRule> rules, Object argument)
- {
- log.debug("Evaluating rules.");
- try
- {
- for (SecurityRule rule : rules)
- {
- String objProperty = BeanUtils.getSimpleProperty(argument, rule.getProperty());
- if (rule.getModifier().equals(ModifierEnum.EQUALS))
- {
- if (StringUtils.equals(objProperty, rule.getValue()))
- {
- log.debug("Matching rule found: {}", rule);
- return true;
- }
- }
- else if (rule.getModifier().equals(ModifierEnum.NOT))
- {
- if (!StringUtils.equals(objProperty, rule.getValue()))
- {
- log.debug("Matching rule found: {}", rule);
- return true;
- }
- }
- else
- {
- throw new RuntimeException("Modifier " + rule.getModifier() + " is not recognized");
- }
- }
- }
- catch (NoSuchMethodException e)
- {
- log.error("{}", e);
- }
- catch (IllegalAccessException e)
- {
- log.error("{}", e);
- }
- catch (InvocationTargetException e)
- {
- log.error("{}", e);
- }
- log.debug("No matching rules found.");
- return false;
- }
-
- /**
- * @param rules
- * @param config
- * @return
- */
- @SuppressWarnings("unchecked")
- private boolean checkPermissions(List<SecurityRule> rules, ConfigAttributeDefinition config)
- {
- log.debug("Evaluation permissions");
- Iterator iterator = config.getConfigAttributes();
- while (iterator.hasNext())
- {
- String attribute = ((ConfigAttribute) iterator.next()).getAttribute();
- for (SecurityRule rule : rules)
- {
- for (PermissionEnum permission : rule.getPermissions())
- {
- if (StringUtils.equals(permission.getValue(), attribute))
- {
- log.debug("Matching permission: {}", permission.getValue());
- return true;
- }
- }
- }
- }
- log.debug("No matching permissions found.");
- return false;
- }
-
- /**
* Sets the securityRuleManager.
* @param securityRuleManager the securityRuleManager to set
*/
@@ -218,5 +83,4 @@
{
this.securityRuleManager = securityRuleManager;
}
-
}
Added: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleBaseHandler.java
===================================================================
--- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleBaseHandler.java (rev 0)
+++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleBaseHandler.java 2008-02-20 14:09:10 UTC (rev 658)
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it
+ */
+package it.openutils.hibernate.security.filter;
+
+import it.openutils.hibernate.security.dataobject.ModifierEnum;
+import it.openutils.hibernate.security.dataobject.PermissionEnum;
+import it.openutils.hibernate.security.dataobject.SecurityRule;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.acegisecurity.Authentication;
+import org.acegisecurity.ConfigAttribute;
+import org.acegisecurity.ConfigAttributeDefinition;
+import org.acegisecurity.GrantedAuthority;
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author fcarone
+ * @version $Id: $
+ */
+public abstract class SecurityRuleBaseHandler
+{
+
+ /**
+ * Logger.
+ */
+ private Logger log = LoggerFactory.getLogger(SecurityRuleBaseHandler.class);
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean supports(ConfigAttribute attribute)
+ {
+ log.debug("Evaluating attribute {}", attribute.getAttribute());
+
+ if (attribute.getAttribute() != null)
+ {
+ for (PermissionEnum permission : PermissionEnum.values())
+ {
+ if (StringUtils.equals(permission.getValue(), attribute.getAttribute()))
+ {
+ log.debug("Support ok.");
+ return true;
+ }
+ }
+ }
+ log.debug("Not supporting attribute.");
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public boolean supports(Class clazz)
+ {
+ return true;
+ }
+
+}
Added: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleUtils.java
===================================================================
--- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleUtils.java (rev 0)
+++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleUtils.java 2008-02-20 14:09:10 UTC (rev 658)
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it
+ */
+package it.openutils.hibernate.security.filter;
+
+import it.openutils.hibernate.security.dataobject.ModifierEnum;
+import it.openutils.hibernate.security.dataobject.PermissionEnum;
+import it.openutils.hibernate.security.dataobject.SecurityRule;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.acegisecurity.Authentication;
+import org.acegisecurity.ConfigAttribute;
+import org.acegisecurity.ConfigAttributeDefinition;
+import org.acegisecurity.GrantedAuthority;
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author fcarone
+ * @version $Id: $
+ */
+public class SecurityRuleUtils
+{
+ /**
+ * Logger.
+ */
+ private Logger log = LoggerFactory.getLogger(SecurityRuleUtils.class);
+
+ /**
+ * @param rules The list of rules to check
+ * @param config The config attribute to check the rules against
+ * @return True if any of the rules matches the given config attribute, false otherwise.
+ */
+ @SuppressWarnings("unchecked")
+ protected boolean checkPermissions(List<SecurityRule> rules, ConfigAttributeDefinition config)
+ {
+ log.debug("Evaluation permissions");
+ Iterator iterator = config.getConfigAttributes();
+ while (iterator.hasNext())
+ {
+ String attribute = ((ConfigAttribute) iterator.next()).getAttribute();
+ for (SecurityRule rule : rules)
+ {
+ for (PermissionEnum permission : rule.getPermissions())
+ {
+ if (StringUtils.equals(permission.getValue(), attribute))
+ {
+ log.debug("Matching permission: {}", permission.getValue());
+ return true;
+ }
+ }
+ }
+ }
+ log.debug("No matching permissions found.");
+ return false;
+ }
+
+ /**
+ * @param rules The list of rules to check
+ * @param argument The object to check the rules against
+ * @return True if any of the rules matches the given object, false otherwise.
+ */
+ protected boolean checkRules(List<SecurityRule> rules, Object argument)
+ {
+ log.debug("Evaluating rules.");
+ try
+ {
+ for (SecurityRule rule : rules)
+ {
+ String objProperty = BeanUtils.getSimpleProperty(argument, rule.getProperty());
+ if (rule.getModifier().equals(ModifierEnum.EQUALS))
+ {
+ if (StringUtils.equals(objProperty, rule.getValue()))
+ {
+ log.debug("Matching rule found: {}", rule);
+ return true;
+ }
+ }
+ else if (rule.getModifier().equals(ModifierEnum.NOT))
+ {
+ if (!StringUtils.equals(objProperty, rule.getValue()))
+ {
+ log.debug("Matching rule found: {}", rule);
+ return true;
+ }
+ }
+ else
+ {
+ throw new RuntimeException("Modifier " + rule.getModifier() + " is not recognized");
+ }
+ }
+ }
+ catch (NoSuchMethodException e)
+ {
+ log.error("{}", e);
+ }
+ catch (IllegalAccessException e)
+ {
+ log.error("{}", e);
+ }
+ catch (InvocationTargetException e)
+ {
+ log.error("{}", e);
+ }
+ log.debug("No matching rules found.");
+ return false;
+ }
+
+
+ /**
+ * @param authentication The authentication method
+ * @return The collection of roles contained in the authentication
+ */
+ protected List<String> getRolesFromAuthentication(Authentication authentication)
+ {
+ List<String> roles = new ArrayList<String>();
+ for (GrantedAuthority authority : authentication.getAuthorities())
+ {
+ log.debug("Granted authority for user {}: {}", authentication.getName(), authority.getAuthority());
+ roles.add(authority.getAuthority());
+ }
+ return roles;
+ }
+}
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-20 10:38:55 UTC (rev 657)
+++ trunk/openutils-hibernate-security/src/test/java/it/openutils/hibernate/security/SecurityIntegrationTest.java 2008-02-20 14:09:10 UTC (rev 658)
@@ -67,6 +67,9 @@
SecurityContextHolder.setContext(sci);
}
+ /**
+ * Init this test class with the dummyDAO DAO (with AOP enabled)
+ */
@Before
public void initDummyDAO()
{
@@ -245,7 +248,7 @@
DummyDataobject filter = new DummyDataobject();
List<DummyDataobject> dummyObjects = securedObject.findFiltered(filter);
Assert.assertNotNull(dummyObjects);
- Assert.assertEquals(2, dummyObjects.size());
+ Assert.assertEquals(3, dummyObjects.size());
}
/**
@@ -259,10 +262,13 @@
DummyDataobject filter = new DummyDataobject();
List<DummyDataobject> dummyObjects = securedObject.findFiltered(filter);
Assert.assertNotNull(dummyObjects);
- Assert.assertEquals(2, dummyObjects.size());
+ Assert.assertEquals(3, dummyObjects.size());
+
+ ((AOPSecurity) applicationContext.getBean("securityAspect")).setEnabled(true);
}
+
/**
* Sets the securedObject.
* @param securedObject the securedObject to set
Modified: trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml
===================================================================
--- trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml 2008-02-20 10:38:55 UTC (rev 657)
+++ trunk/openutils-hibernate-security/src/test/resources/SecurityIntegrationTest-load.xml 2008-02-20 14:09:10 UTC (rev 658)
@@ -25,6 +25,7 @@
<value>Verdi</value>
<value>ve...@ex...</value>
</row>
+ <!-- UserTre has no access to any data -->
<row>
<value>UserTre</value>
<!-- sha1 for 'password' -->
@@ -181,6 +182,11 @@
<value>1</value>
<value>DEF</value>
</row>
+ <row>
+ <value>2</value>
+ <value>3</value>
+ <value>GHI</value>
+ </row>
</table>
</dataset>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|