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/>