You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by jb...@apache.org on 2012/12/19 16:58:28 UTC

svn commit: r1423908 - in /syncope/trunk/core/src/main: java/org/apache/syncope/core/persistence/validation/entity/ java/org/apache/syncope/core/policy/ java/org/apache/syncope/core/policy/impl/ java/org/apache/syncope/core/validation/user/ resources/

Author: jbonofre
Date: Wed Dec 19 15:58:27 2012
New Revision: 1423908

URL: http://svn.apache.org/viewvc?rev=1423908&view=rev
Log:
[SYNCOPE-242] Move SyncopeUserValidator back into validation.entity as it is referenced from the @SyncopeUserCheck annotation

Added:
    syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserValidator.java
      - copied, changed from r1423830, syncope/trunk/core/src/main/java/org/apache/syncope/core/validation/user/SyncopeUserValidator.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/impl/
    syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/impl/AccountPolicyEnforcerImpl.java
      - copied, changed from r1423830, syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/impl/PasswordPolicyEnforcerImpl.java
      - copied, changed from r1423830, syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java
Removed:
    syncope/trunk/core/src/main/java/org/apache/syncope/core/validation/user/SyncopeUserValidator.java
Modified:
    syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserCheck.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PolicyEnforceException.java
    syncope/trunk/core/src/main/resources/persistenceContext.xml

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserCheck.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserCheck.java?rev=1423908&r1=1423907&r2=1423908&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserCheck.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserCheck.java Wed Dec 19 15:58:27 2012
@@ -26,7 +26,6 @@ import java.lang.annotation.Target;
 import javax.validation.Constraint;
 import javax.validation.Payload;
 
-import org.apache.syncope.core.validation.user.SyncopeUserValidator;
 
 @Target( { ElementType.TYPE })
 @Retention(RetentionPolicy.RUNTIME)

Copied: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserValidator.java (from r1423830, syncope/trunk/core/src/main/java/org/apache/syncope/core/validation/user/SyncopeUserValidator.java)
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserValidator.java?p2=syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserValidator.java&p1=syncope/trunk/core/src/main/java/org/apache/syncope/core/validation/user/SyncopeUserValidator.java&r1=1423830&r2=1423908&rev=1423908&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/validation/user/SyncopeUserValidator.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserValidator.java Wed Dec 19 15:58:27 2012
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.syncope.core.validation.user;
+package org.apache.syncope.core.persistence.validation.entity;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -29,8 +29,6 @@ import org.apache.syncope.core.persisten
 import org.apache.syncope.core.persistence.beans.role.SyncopeRole;
 import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
 import org.apache.syncope.core.persistence.dao.PolicyDAO;
-import org.apache.syncope.core.persistence.validation.entity.AbstractValidator;
-import org.apache.syncope.core.persistence.validation.entity.SyncopeUserCheck;
 import org.apache.syncope.core.policy.AccountPolicyEnforcer;
 import org.apache.syncope.core.policy.PasswordPolicyEnforcer;
 import org.apache.syncope.core.policy.PolicyEvaluator;

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java?rev=1423908&r1=1423907&r2=1423908&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java Wed Dec 19 15:58:27 2012
@@ -18,123 +18,14 @@
  */
 package org.apache.syncope.core.policy;
 
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-import org.apache.commons.collections.keyvalue.DefaultMapEntry;
-import org.apache.syncope.client.to.UserTO;
-import org.apache.syncope.core.persistence.beans.PropagationTask;
 import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
-import org.apache.syncope.core.propagation.PropagationManager;
-import org.apache.syncope.core.propagation.PropagationTaskExecutor;
-import org.apache.syncope.core.rest.data.UserDataBinder;
-import org.apache.syncope.core.workflow.user.UserWorkflowAdapter;
-import org.apache.syncope.core.workflow.WorkflowResult;
 import org.apache.syncope.types.AccountPolicySpec;
 import org.apache.syncope.types.PolicyType;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 
-@Component
-public class AccountPolicyEnforcer extends PolicyEnforcer<AccountPolicySpec, SyncopeUser> {
+public interface AccountPolicyEnforcer {
 
-    @Autowired
-    private UserWorkflowAdapter uwfAdapter;
+	public abstract void enforce(AccountPolicySpec policy, PolicyType type,
+			SyncopeUser user) throws AccountPolicyException,
+			PolicyEnforceException;
 
-    @Autowired
-    private PropagationManager propagationManager;
-
-    @Autowired
-    private PropagationTaskExecutor taskExecutor;
-
-    @Autowired
-    private UserDataBinder userDataBinder;
-
-    private static final Pattern PATTERN = Pattern.compile("[a-zA-Z0-9-_@. ]+");
-
-    private static final Pattern LCPATTERN = Pattern.compile("[a-z0-9-_@. ]+");
-
-    private static final Pattern UCPATTERN = Pattern.compile("[A-Z0-9-_@. ]+");
-
-    @Override
-    public void enforce(final AccountPolicySpec policy, final PolicyType type, final SyncopeUser user)
-            throws AccountPolicyException, PolicyEnforceException {
-
-        if (user.getUsername() == null) {
-            throw new PolicyEnforceException("Invalid account");
-        }
-
-        if (policy == null) {
-            throw new PolicyEnforceException("Invalid policy");
-        }
-
-        // check min length
-        if (policy.getMinLength() > 0 && policy.getMinLength() > user.getUsername().length()) {
-            throw new AccountPolicyException("Username too short");
-        }
-
-        // check max length
-        if (policy.getMaxLength() > 0 && policy.getMaxLength() < user.getUsername().length()) {
-            throw new AccountPolicyException("Username too long");
-        }
-
-        // check words not permitted
-        for (String word : policy.getWordsNotPermitted()) {
-            if (user.getUsername().contains(word)) {
-                throw new AccountPolicyException("Used word(s) not permitted");
-            }
-        }
-
-        // check syntax
-        if ((policy.isAllLowerCase() && !LCPATTERN.matcher(user.getUsername()).matches())
-                || (policy.isAllUpperCase() && !UCPATTERN.matcher(user.getUsername()).matches())
-                || !PATTERN.matcher(user.getUsername()).matches()) {
-            throw new AccountPolicyException("Invalid username syntax");
-        }
-
-        // check prefix
-        for (String prefix : policy.getPrefixesNotPermitted()) {
-            if (user.getUsername().startsWith(prefix)) {
-                throw new AccountPolicyException("Prefix not permitted");
-            }
-        }
-
-        // check suffix
-        for (String suffix : policy.getSuffixesNotPermitted()) {
-            if (user.getUsername().endsWith(suffix)) {
-                throw new AccountPolicyException("Suffix not permitted");
-            }
-        }
-
-        // check for subsequent failed logins
-        if (user.getFailedLogins() != null && policy.getPermittedLoginRetries() > 0
-                && user.getFailedLogins() > policy.getPermittedLoginRetries() && !user.getSuspended()) {
-            try {
-                LOG.debug("User {}:{} is over to max failed logins", user.getId(), user.getUsername());
-
-                // reduce failed logins number to avoid multiple request
-                user.setFailedLogins(user.getFailedLogins() - 1);
-
-                // disable user
-                final WorkflowResult<Long> updated = uwfAdapter.suspend(user);
-
-                // propagate suspension if and only if it is required by policy
-                if (policy.isPropagateSuspension()) {
-                    final List<PropagationTask> tasks = propagationManager.getUserUpdateTaskIds(
-                            new WorkflowResult<Map.Entry<Long, Boolean>>(
-                            new DefaultMapEntry(updated.getResult(), Boolean.FALSE),
-                            updated.getPropByRes(), updated.getPerformedTasks()));
-
-                    taskExecutor.execute(tasks);
-                }
-
-                if (LOG.isDebugEnabled()) {
-                    final UserTO savedTO = userDataBinder.getUserTO(updated.getResult());
-                    LOG.debug("About to return suspended user\n{}", savedTO);
-                }
-            } catch (Exception e) {
-                LOG.error("Error during user suspension", e);
-            }
-        }
-    }
-}
+}
\ No newline at end of file

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java?rev=1423908&r1=1423907&r2=1423908&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java Wed Dec 19 15:58:27 2012
@@ -20,174 +20,11 @@ package org.apache.syncope.core.policy;
 
 import org.apache.syncope.types.PasswordPolicySpec;
 import org.apache.syncope.types.PolicyType;
-import org.springframework.stereotype.Component;
 
-@Component
-public class PasswordPolicyEnforcer extends PolicyEnforcer<PasswordPolicySpec, String> {
+public interface PasswordPolicyEnforcer {
 
-    @Override
-    public void enforce(final PasswordPolicySpec policy, final PolicyType type, final String password)
-            throws PasswordPolicyException, PolicyEnforceException {
+	public abstract void enforce(PasswordPolicySpec policy, PolicyType type,
+			String password) throws PasswordPolicyException,
+			PolicyEnforceException;
 
-        if (password == null) {
-            throw new PolicyEnforceException("Invalid password");
-        }
-
-        if (policy == null) {
-            throw new PolicyEnforceException("Invalid policy");
-        }
-
-        // check length
-        if (policy.getMinLength() > 0 && policy.getMinLength() > password.length()) {
-            throw new PasswordPolicyException("Password too short");
-        }
-
-        if (policy.getMaxLength() > 0 && policy.getMaxLength() < password.length()) {
-            throw new PasswordPolicyException("Password too long");
-        }
-
-        // check words not permitted
-        for (String word : policy.getWordsNotPermitted()) {
-            if (password.contains(word)) {
-                throw new PasswordPolicyException("Used word(s) not permitted");
-            }
-        }
-
-        // check digits occurrence
-        if (policy.isDigitRequired() && !checkForDigit(password)) {
-            throw new PasswordPolicyException("Password must contain digit(s)");
-        }
-
-        // check lowercase alphabetic characters occurrence
-        if (policy.isLowercaseRequired() && !checkForLowercase(password)) {
-            throw new PasswordPolicyException("Password must contain lowercase alphabetic character(s)");
-        }
-
-        // check uppercase alphabetic characters occurrence
-        if (policy.isUppercaseRequired() && !checkForUppercase(password)) {
-            throw new PasswordPolicyException("Password must contain uppercase alphabetic character(s)");
-        }
-
-        // check prefix
-        for (String prefix : policy.getPrefixesNotPermitted()) {
-            if (password.startsWith(prefix)) {
-                throw new PasswordPolicyException("Prefix not permitted");
-            }
-        }
-
-        // check suffix
-        for (String suffix : policy.getSuffixesNotPermitted()) {
-            if (password.endsWith(suffix)) {
-                throw new PasswordPolicyException("Suffix not permitted");
-            }
-        }
-
-        // check digit first occurrence
-        if (policy.isMustStartWithDigit() && !checkForFirstDigit(password)) {
-            throw new PasswordPolicyException("Password must start with a digit");
-        }
-
-        if (policy.isMustntStartWithDigit() && checkForFirstDigit(password)) {
-            throw new PasswordPolicyException("Password mustn't start with a digit");
-        }
-
-        // check digit last occurrence
-        if (policy.isMustEndWithDigit() && !checkForLastDigit(password)) {
-            throw new PasswordPolicyException("Password must end with a digit");
-        }
-
-        if (policy.isMustntEndWithDigit() && checkForLastDigit(password)) {
-            throw new PasswordPolicyException("Password mustn't end with a digit");
-        }
-
-        // check alphanumeric characters occurence
-        if (policy.isAlphanumericRequired() && !checkForAlphanumeric(password)) {
-            throw new PasswordPolicyException("Password must contain alphanumeric character(s)");
-        }
-
-        // check non alphanumeric characters occurence
-        if (policy.isNonAlphanumericRequired() && !checkForNonAlphanumeric(password)) {
-            throw new PasswordPolicyException("Password must contain non-alphanumeric character(s)");
-        }
-
-        // check alphanumeric character first occurrence
-        if (policy.isMustStartWithAlpha() && !checkForFirstAlphanumeric(password)) {
-            throw new PasswordPolicyException("Password must start with an alphanumeric character");
-        }
-
-        if (policy.isMustntStartWithAlpha() && checkForFirstAlphanumeric(password)) {
-            throw new PasswordPolicyException("Password mustn't start with an alphanumeric character");
-        }
-
-        // check alphanumeric character last occurrence
-        if (policy.isMustEndWithAlpha() && !checkForLastAlphanumeric(password)) {
-            throw new PasswordPolicyException("Password must end with an alphanumeric character");
-        }
-
-        if (policy.isMustntEndWithAlpha() && checkForLastAlphanumeric(password)) {
-            throw new PasswordPolicyException("Password mustn't end with an alphanumeric character");
-        }
-
-        // check non alphanumeric character first occurrence
-        if (policy.isMustStartWithNonAlpha() && !checkForFirstNonAlphanumeric(password)) {
-            throw new PasswordPolicyException("Password must start with a non-alphanumeric character");
-        }
-
-        if (policy.isMustntStartWithNonAlpha() && checkForFirstNonAlphanumeric(password)) {
-            throw new PasswordPolicyException("Password mustn't start with a non-alphanumeric character");
-        }
-
-        // check non alphanumeric character last occurrence
-        if (policy.isMustEndWithNonAlpha() && !checkForLastNonAlphanumeric(password)) {
-            throw new PasswordPolicyException("Password must end with a non-alphanumeric character");
-        }
-
-        if (policy.isMustntEndWithNonAlpha() && checkForLastNonAlphanumeric(password)) {
-            throw new PasswordPolicyException("Password mustn't end with a non-alphanumeric character");
-        }
-    }
-
-    private boolean checkForDigit(final String str) {
-        return PolicyPattern.DIGIT.matcher(str).matches();
-    }
-
-    private boolean checkForLowercase(final String str) {
-        return PolicyPattern.ALPHA_LOWERCASE.matcher(str).matches();
-    }
-
-    private boolean checkForUppercase(final String str) {
-        return PolicyPattern.ALPHA_UPPERCASE.matcher(str).matches();
-    }
-
-    private boolean checkForFirstDigit(final String str) {
-        return PolicyPattern.FIRST_DIGIT.matcher(str).matches();
-    }
-
-    private boolean checkForLastDigit(final String str) {
-        return PolicyPattern.LAST_DIGIT.matcher(str).matches();
-    }
-
-    private boolean checkForAlphanumeric(final String str) {
-        return PolicyPattern.ALPHANUMERIC.matcher(str).matches();
-    }
-
-    private boolean checkForFirstAlphanumeric(final String str) {
-        return PolicyPattern.FIRST_ALPHANUMERIC.matcher(str).matches();
-    }
-
-    private boolean checkForLastAlphanumeric(final String str) {
-        return PolicyPattern.LAST_ALPHANUMERIC.matcher(str).matches();
-    }
-
-    private boolean checkForNonAlphanumeric(final String str) {
-        return PolicyPattern.NON_ALPHANUMERIC.matcher(str).matches();
-    }
-
-    private boolean checkForFirstNonAlphanumeric(final String str) {
-        return PolicyPattern.FIRST_NON_ALPHANUMERIC.matcher(str).matches();
-    }
-
-    private boolean checkForLastNonAlphanumeric(final String str) {
-        return PolicyPattern.LAST_NON_ALPHANUMERIC.matcher(str).matches();
-    }
-}
+}
\ No newline at end of file

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PolicyEnforceException.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PolicyEnforceException.java?rev=1423908&r1=1423907&r2=1423908&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PolicyEnforceException.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PolicyEnforceException.java Wed Dec 19 15:58:27 2012
@@ -18,7 +18,7 @@
  */
 package org.apache.syncope.core.policy;
 
-class PolicyEnforceException extends Exception {
+public class PolicyEnforceException extends Exception {
 
     private static final long serialVersionUID = 3247084727383061069L;
 

Copied: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/impl/AccountPolicyEnforcerImpl.java (from r1423830, syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java)
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/impl/AccountPolicyEnforcerImpl.java?p2=syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/impl/AccountPolicyEnforcerImpl.java&p1=syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java&r1=1423830&r2=1423908&rev=1423908&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/impl/AccountPolicyEnforcerImpl.java Wed Dec 19 15:58:27 2012
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.syncope.core.policy;
+package org.apache.syncope.core.policy.impl;
 
 import java.util.List;
 import java.util.Map;
@@ -25,6 +25,10 @@ import org.apache.commons.collections.ke
 import org.apache.syncope.client.to.UserTO;
 import org.apache.syncope.core.persistence.beans.PropagationTask;
 import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
+import org.apache.syncope.core.policy.AccountPolicyEnforcer;
+import org.apache.syncope.core.policy.AccountPolicyException;
+import org.apache.syncope.core.policy.PolicyEnforceException;
+import org.apache.syncope.core.policy.PolicyEnforcer;
 import org.apache.syncope.core.propagation.PropagationManager;
 import org.apache.syncope.core.propagation.PropagationTaskExecutor;
 import org.apache.syncope.core.rest.data.UserDataBinder;
@@ -36,7 +40,7 @@ import org.springframework.beans.factory
 import org.springframework.stereotype.Component;
 
 @Component
-public class AccountPolicyEnforcer extends PolicyEnforcer<AccountPolicySpec, SyncopeUser> {
+public class AccountPolicyEnforcerImpl extends PolicyEnforcer<AccountPolicySpec, SyncopeUser> implements AccountPolicyEnforcer {
 
     @Autowired
     private UserWorkflowAdapter uwfAdapter;
@@ -56,6 +60,9 @@ public class AccountPolicyEnforcer exten
 
     private static final Pattern UCPATTERN = Pattern.compile("[A-Z0-9-_@. ]+");
 
+    /* (non-Javadoc)
+	 * @see org.apache.syncope.core.policy.AccountPolicyEnforcer#enforce(org.apache.syncope.types.AccountPolicySpec, org.apache.syncope.types.PolicyType, org.apache.syncope.core.persistence.beans.user.SyncopeUser)
+	 */
     @Override
     public void enforce(final AccountPolicySpec policy, final PolicyType type, final SyncopeUser user)
             throws AccountPolicyException, PolicyEnforceException {

Copied: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/impl/PasswordPolicyEnforcerImpl.java (from r1423830, syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java)
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/impl/PasswordPolicyEnforcerImpl.java?p2=syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/impl/PasswordPolicyEnforcerImpl.java&p1=syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java&r1=1423830&r2=1423908&rev=1423908&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/impl/PasswordPolicyEnforcerImpl.java Wed Dec 19 15:58:27 2012
@@ -16,16 +16,24 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.syncope.core.policy;
+package org.apache.syncope.core.policy.impl;
 
+import org.apache.syncope.core.policy.PasswordPolicyEnforcer;
+import org.apache.syncope.core.policy.PasswordPolicyException;
+import org.apache.syncope.core.policy.PolicyEnforceException;
+import org.apache.syncope.core.policy.PolicyEnforcer;
+import org.apache.syncope.core.policy.PolicyPattern;
 import org.apache.syncope.types.PasswordPolicySpec;
 import org.apache.syncope.types.PolicyType;
 import org.springframework.stereotype.Component;
 
 @Component
-public class PasswordPolicyEnforcer extends PolicyEnforcer<PasswordPolicySpec, String> {
+public class PasswordPolicyEnforcerImpl extends PolicyEnforcer<PasswordPolicySpec, String> implements PasswordPolicyEnforcer {
 
-    @Override
+    /* (non-Javadoc)
+	 * @see org.apache.syncope.core.policy.PasswordPolicyEnforcer#enforce(org.apache.syncope.types.PasswordPolicySpec, org.apache.syncope.types.PolicyType, java.lang.String)
+	 */
+	@Override
     public void enforce(final PasswordPolicySpec policy, final PolicyType type, final String password)
             throws PasswordPolicyException, PolicyEnforceException {
 

Modified: syncope/trunk/core/src/main/resources/persistenceContext.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/resources/persistenceContext.xml?rev=1423908&r1=1423907&r2=1423908&view=diff
==============================================================================
--- syncope/trunk/core/src/main/resources/persistenceContext.xml (original)
+++ syncope/trunk/core/src/main/resources/persistenceContext.xml Wed Dec 19 15:58:27 2012
@@ -38,6 +38,7 @@ under the License.
   <context:component-scan base-package="org.apache.syncope.core.persistence"/>
   <context:component-scan base-package="org.apache.syncope.core.rest.data"/>
   <context:component-scan base-package="org.apache.syncope.core.policy"/>
+  <context:component-scan base-package="org.apache.syncope.core.policy.impl"/>
 
   <aop:aspectj-autoproxy/>