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>