[pal-cvs 2921] [665] added password validator.

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2007年 10月 26日 (金) 14:30:43 JST


Revision: 665
          http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=pal&view=rev&rev=665
Author:   shinsuke
Date:     2007-10-26 14:30:42 +0900 (Fri, 26 Oct 2007)

Log Message:
-----------
added password validator.

Modified Paths:
--------------
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/PALAdminConstants.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/PasswordManagementService.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/password/PasswordEditPage.java
    pal-admin/trunk/src/main/resources/PAMessages.properties
    pal-admin/trunk/src/main/resources/app.dicon

Added Paths:
-----------
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/PasswordValidator.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/DifferencePasswordValidator.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/PasswordValidatorsProxy.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/UsernamePasswordValidator.java
    pal-admin/trunk/src/main/resources/passwordValidator.dicon


-------------- next part --------------
Modified: pal-admin/trunk/src/main/java/jp/sf/pal/admin/PALAdminConstants.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/PALAdminConstants.java	2007-10-26 04:23:18 UTC (rev 664)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/PALAdminConstants.java	2007-10-26 05:30:42 UTC (rev 665)
@@ -188,4 +188,6 @@
 
     public static final String USER_ADMINISTRATION = "PAL User Administration";
 
+    public static final String PASSWORD_VALIDATOR = "passwordValidator";
+
 }

Modified: pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/PasswordManagementService.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/PasswordManagementService.java	2007-10-26 04:23:18 UTC (rev 664)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/PasswordManagementService.java	2007-10-26 05:30:42 UTC (rev 665)
@@ -23,6 +23,7 @@
 
 import jp.sf.pal.admin.PALAdminConstants;
 import jp.sf.pal.admin.util.PortalComponentUtil;
+import jp.sf.pal.admin.validator.password.PasswordValidator;
 import jp.sf.pal.common.CommonException;
 
 import org.apache.jetspeed.PortalReservedParameters;
@@ -33,6 +34,10 @@
 import org.apache.jetspeed.security.PasswordAlreadyUsedException;
 import org.apache.jetspeed.security.SecurityException;
 import org.apache.jetspeed.security.UserManager;
+import org.seasar.framework.container.ComponentNotFoundRuntimeException;
+import org.seasar.framework.container.CyclicReferenceRuntimeException;
+import org.seasar.framework.container.S2Container;
+import org.seasar.framework.container.TooManyRegistrationRuntimeException;
 
 public class PasswordManagementService implements Serializable {
 
@@ -41,15 +46,39 @@
      */
     private static final long serialVersionUID = 7648155261356882471L;
 
-    public void updatePassword(String currentPassword, String newPassword)
-            throws CommonException {
+    private S2Container container;
+
+    public String getUsername() throws CommonException {
         Principal principal = FacesContext.getCurrentInstance()
                 .getExternalContext().getUserPrincipal();
         if (principal == null) {
             throw new CommonException("could.not.change.password",
                     "User principal is null.");
         }
+        return principal.getName();
+    }
 
+    public boolean validate(String username, String currentPassword,
+            String newPassword) {
+        if (getContainer() != null) {
+            try {
+                PasswordValidator passwordValidator = (PasswordValidator) getContainer()
+                        .getComponent(PALAdminConstants.PASSWORD_VALIDATOR);
+                if (passwordValidator != null) {
+                    return passwordValidator.validate(username,
+                            currentPassword, newPassword);
+                }
+            } catch (ComponentNotFoundRuntimeException e) {
+            } catch (TooManyRegistrationRuntimeException e) {
+            } catch (CyclicReferenceRuntimeException e) {
+            }
+        }
+        return true;
+    }
+
+    public void updatePassword(String username, String currentPassword,
+            String newPassword) throws CommonException {
+
         UserManager userManager = PortalComponentUtil.getUserManager();
         if (userManager == null) {
             throw new CommonException("could.not.change.password",
@@ -62,7 +91,6 @@
         }
 
         try {
-            String username = principal.getName();
             RequestContext requestContext = (RequestContext) FacesContext
                     .getCurrentInstance().getExternalContext().getRequestMap()
                     .get(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);
@@ -92,4 +120,18 @@
         }
 
     }
+
+    /**
+     * @return the container
+     */
+    public S2Container getContainer() {
+        return container;
+    }
+
+    /**
+     * @param container the container to set
+     */
+    public void setContainer(S2Container container) {
+        this.container = container;
+    }
 }

Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/PasswordValidator.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/PasswordValidator.java	2007-10-26 04:23:18 UTC (rev 664)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/PasswordValidator.java	2007-10-26 05:30:42 UTC (rev 665)
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2005-2007 Portal Application Laboratory and the Others.
+ *
+ * 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 jp.sf.pal.admin.validator.password;
+
+import java.io.Serializable;
+
+public interface PasswordValidator extends Serializable {
+    public abstract boolean validate(String username, String oldpassword,
+            String newpassword);
+}


Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/PasswordValidator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/DifferencePasswordValidator.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/DifferencePasswordValidator.java	2007-10-26 04:23:18 UTC (rev 664)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/DifferencePasswordValidator.java	2007-10-26 05:30:42 UTC (rev 665)
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2005-2007 Portal Application Laboratory and the Others.
+ *
+ * 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 jp.sf.pal.admin.validator.password.impl;
+
+import jp.sf.pal.admin.validator.password.PasswordValidator;
+
+public class DifferencePasswordValidator implements PasswordValidator {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -2933074231760851557L;
+
+    private int differenceLength;
+
+    public boolean validate(String username, String oldpassword,
+            String newpassword) {
+        if (oldpassword == null || newpassword == null) {
+            return false;
+        }
+
+        for (int i = 0; i < oldpassword.length() - differenceLength + 1; i++) {
+            String partOfPassword = oldpassword.substring(i, i
+                    + differenceLength);
+            if (newpassword.indexOf(partOfPassword) >= 0) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * @return the differenceLength
+     */
+    public int getDifferenceLength() {
+        return differenceLength;
+    }
+
+    /**
+     * @param differenceLength the differenceLength to set
+     */
+    public void setDifferenceLength(int differenceLength) {
+        this.differenceLength = differenceLength;
+    }
+
+}


Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/DifferencePasswordValidator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/PasswordValidatorsProxy.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/PasswordValidatorsProxy.java	2007-10-26 04:23:18 UTC (rev 664)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/PasswordValidatorsProxy.java	2007-10-26 05:30:42 UTC (rev 665)
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2005-2007 Portal Application Laboratory and the Others.
+ *
+ * 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 jp.sf.pal.admin.validator.password.impl;
+
+import java.util.List;
+
+import jp.sf.pal.admin.validator.password.PasswordValidator;
+
+public class PasswordValidatorsProxy implements PasswordValidator {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 8229215641608254153L;
+
+    private List<PasswordValidator> passwordValidatorList;
+
+    public boolean validate(String username, String oldpassword,
+            String newpassword) {
+        for (PasswordValidator passwordValidator : passwordValidatorList) {
+            if (!passwordValidator.validate(username, oldpassword, newpassword)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * @return the passwordValidatorList
+     */
+    public List<PasswordValidator> getPasswordValidatorList() {
+        return passwordValidatorList;
+    }
+
+    /**
+     * @param passwordValidatorList the passwordValidatorList to set
+     */
+    public void setPasswordValidatorList(
+            List<PasswordValidator> passwordValidatorList) {
+        this.passwordValidatorList = passwordValidatorList;
+    }
+
+}


Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/PasswordValidatorsProxy.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/UsernamePasswordValidator.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/UsernamePasswordValidator.java	2007-10-26 04:23:18 UTC (rev 664)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/UsernamePasswordValidator.java	2007-10-26 05:30:42 UTC (rev 665)
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2005-2007 Portal Application Laboratory and the Others.
+ *
+ * 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 jp.sf.pal.admin.validator.password.impl;
+
+import jp.sf.pal.admin.validator.password.PasswordValidator;
+
+public class UsernamePasswordValidator implements PasswordValidator {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 2022271617054629377L;
+
+    public boolean validate(String username, String oldpassword,
+            String newpassword) {
+        if (username == null || newpassword == null) {
+            return false;
+        }
+
+        if (newpassword.indexOf(username) < 0) {
+            return true;
+        }
+        return false;
+    }
+
+}


Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/validator/password/impl/UsernamePasswordValidator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/password/PasswordEditPage.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/password/PasswordEditPage.java	2007-10-26 04:23:18 UTC (rev 664)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/password/PasswordEditPage.java	2007-10-26 05:30:42 UTC (rev 665)
@@ -64,9 +64,27 @@
     }
 
     public Class<?> doFinish() {
+        String username = null;
         try {
-            getPasswordManagementService().updatePassword(currentPassword,
-                    newPassword);
+            username = getPasswordManagementService().getUsername();
+        } catch (CommonException e) {
+            logger.error("EPA0047", e);
+            FacesMessageUtil.addErrorMessage(e.getMessageId());
+        }
+
+        if (username == null) {
+            return null;
+        }
+
+        if (!getPasswordManagementService().validate(username, currentPassword,
+                newPassword)) {
+            FacesMessageUtil.addErrorMessage("invalid.new.password");
+            return null;
+        }
+
+        try {
+            getPasswordManagementService().updatePassword(username,
+                    currentPassword, newPassword);
             FacesMessageUtil.addInfoMessage("changed.password");
         } catch (CommonException e) {
             logger.error("EPA0046", e);

Modified: pal-admin/trunk/src/main/resources/PAMessages.properties
===================================================================
--- pal-admin/trunk/src/main/resources/PAMessages.properties	2007-10-26 04:23:18 UTC (rev 664)
+++ pal-admin/trunk/src/main/resources/PAMessages.properties	2007-10-26 05:30:42 UTC (rev 665)
@@ -45,3 +45,4 @@
 EPA0044=Could not update a permission for page.
 EPA0045=Could not delete a permission for folder.
 EPA0046=Could not change the password. 
+EPA0047=Could not get a username.

Modified: pal-admin/trunk/src/main/resources/app.dicon
===================================================================
--- pal-admin/trunk/src/main/resources/app.dicon	2007-10-26 04:23:18 UTC (rev 664)
+++ pal-admin/trunk/src/main/resources/app.dicon	2007-10-26 05:30:42 UTC (rev 665)
@@ -7,4 +7,5 @@
 	<include path="app_aop.dicon"/>
 	<include path="teedaExtension.dicon"/>
 	<include path="dxo.dicon"/>
+	<!--include path="passwordValidator.dicon"/-->
 </components>

Added: pal-admin/trunk/src/main/resources/passwordValidator.dicon
===================================================================
--- pal-admin/trunk/src/main/resources/passwordValidator.dicon	2007-10-26 04:23:18 UTC (rev 664)
+++ pal-admin/trunk/src/main/resources/passwordValidator.dicon	2007-10-26 05:30:42 UTC (rev 665)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd">
+<components>
+  <component name="passwordValidator" class="jp.sf.pal.admin.validator.password.impl.PasswordValidatorsProxy">
+    <property name="passwordValidatorList">{usernamePasswordValidator, differencePasswordValidator}</property>
+  </component>
+  <component name="usernamePasswordValidator" class="jp.sf.pal.admin.validator.password.impl.UsernamePasswordValidator">
+  </component>
+  <component name="differencePasswordValidator" class="jp.sf.pal.admin.validator.password.impl.DifferencePasswordValidator">
+    <property name="differenceLength">2</property>
+  </component>
+</components>


pal-cvs メーリングリストの案内
Back to archive index