📄 loginservices.java
字号:
result.put("updatedUserLogin", userLoginToUpdate); return result; } /** Updates the UserLoginId for a party, replicating password, etc from * current login and expiring the old login. *@param ctx The DispatchContext that this service is operating in *@param context Map containing the input parameters *@return Map with the result of the service, the output parameters */ public static Map updateUserLoginId(DispatchContext ctx, Map context) { Map result = new HashMap(); GenericDelegator delegator = ctx.getDelegator(); GenericValue loggedInUserLogin = (GenericValue) context.get("userLogin"); List errorMessageList = new LinkedList(); Locale locale = (Locale) context.get("locale"); //boolean useEncryption = "true".equals(UtilProperties.getPropertyValue("security.properties", "password.encrypt")); String userLoginId = (String) context.get("userLoginId"); String errMsg = null; if ((userLoginId != null) && ("true".equals(UtilProperties.getPropertyValue("security.properties", "username.lowercase")))) { userLoginId = userLoginId.toLowerCase(); } String partyId = loggedInUserLogin.getString("partyId"); String password = loggedInUserLogin.getString("currentPassword"); String passwordHint = loggedInUserLogin.getString("passwordHint"); // security: don't create a user login if the specified partyId (if not empty) already exists // unless the logged in user has permission to do so (same partyId or PARTYMGR_CREATE) if (partyId != null || partyId.length() > 0) { //GenericValue party = null; //try { // party = delegator.findByPrimaryKey("Party", UtilMisc.toMap("partyId", partyId)); //} catch (GenericEntityException e) { // Debug.logWarning(e, "", module); //} if (loggedInUserLogin != null) { // security check: userLogin partyId must equal partyId, or must have PARTYMGR_CREATE permission if (!partyId.equals(loggedInUserLogin.getString("partyId"))) { errMsg = UtilProperties.getMessage(resource,"loginservices.party_with_party_id_exists_not_permission_create_user_login", locale); errorMessageList.add(errMsg); } } else { errMsg = UtilProperties.getMessage(resource,"loginservices.must_logged_in_have_permission_create_user_login_exists", locale); errorMessageList.add(errMsg); } } GenericValue newUserLogin = null; boolean doCreate = true; // check to see if there's a matching login and use it if it's for the same party try { newUserLogin = delegator.findByPrimaryKey("UserLogin", UtilMisc.toMap("userLoginId", userLoginId)); } catch (GenericEntityException e) { Debug.logWarning(e, "", module); Map messageMap = UtilMisc.toMap("errorMessage", e.getMessage()); errMsg = UtilProperties.getMessage(resource,"loginservices.could_not_create_login_user_read_failure", messageMap, locale); errorMessageList.add(errMsg); } if (newUserLogin != null) { if (!newUserLogin.get("partyId").equals(partyId)) { Map messageMap = UtilMisc.toMap("userLoginId", userLoginId); errMsg = UtilProperties.getMessage(resource,"loginservices.could_not_create_login_user_with_ID_exists", messageMap, locale); errorMessageList.add(errMsg); } else { doCreate = false; } } else { newUserLogin = delegator.makeValue("UserLogin", UtilMisc.toMap("userLoginId", userLoginId)); } newUserLogin.set("passwordHint", passwordHint); newUserLogin.set("partyId", partyId); newUserLogin.set("currentPassword", password); newUserLogin.set("enabled", "Y"); newUserLogin.set("disabledDateTime", null); if (errorMessageList.size() > 0) { return ServiceUtil.returnError(errorMessageList); } try { if (doCreate) { newUserLogin.create(); } else { newUserLogin.store(); } } catch (GenericEntityException e) { Debug.logWarning(e, "", module); Map messageMap = UtilMisc.toMap("errorMessage", e.getMessage()); errMsg = UtilProperties.getMessage(resource,"loginservices.could_not_create_login_user_write_failure", messageMap, locale); return ServiceUtil.returnError(errMsg); } loggedInUserLogin.set("enabled", "N"); loggedInUserLogin.set("disabledDateTime", UtilDateTime.nowTimestamp()); try { loggedInUserLogin.store(); } catch (GenericEntityException e) { Debug.logWarning(e, "", module); Map messageMap = UtilMisc.toMap("errorMessage", e.getMessage()); errMsg = UtilProperties.getMessage(resource,"loginservices.could_not_disable_old_login_user_write_failure", messageMap, locale); return ServiceUtil.returnError(errMsg); } result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS); result.put("newUserLogin", newUserLogin); return result; } /** Updates UserLogin Security info *@param ctx The DispatchContext that this service is operating in *@param context Map containing the input parameters *@return Map with the result of the service, the output parameters */ public static Map updateUserLoginSecurity(DispatchContext ctx, Map context) { Map result = new HashMap(); GenericDelegator delegator = ctx.getDelegator(); Security security = ctx.getSecurity(); GenericValue loggedInUserLogin = (GenericValue) context.get("userLogin"); Locale locale = (Locale) context.get("locale"); String userLoginId = (String) context.get("userLoginId"); String errMsg = null; if (userLoginId == null || userLoginId.length() == 0) { userLoginId = loggedInUserLogin.getString("userLoginId"); } // <b>security check</b>: must have PARTYMGR_UPDATE permission if (!security.hasEntityPermission("PARTYMGR", "_UPDATE", loggedInUserLogin) && !security.hasEntityPermission("SECURITY", "_UPDATE", loggedInUserLogin)) { errMsg = UtilProperties.getMessage(resource,"loginservices.not_permission_update_security_info_for_user_login", locale); return ServiceUtil.returnError(errMsg); } GenericValue userLoginToUpdate = null; try { userLoginToUpdate = delegator.findByPrimaryKey("UserLogin", UtilMisc.toMap("userLoginId", userLoginId)); } catch (GenericEntityException e) { Map messageMap = UtilMisc.toMap("errorMessage", e.getMessage()); errMsg = UtilProperties.getMessage(resource,"loginservices.could_not_change_password_read_failure", messageMap, locale); return ServiceUtil.returnError(errMsg); } if (userLoginToUpdate == null) { Map messageMap = UtilMisc.toMap("userLoginId", userLoginId); errMsg = UtilProperties.getMessage(resource,"loginservices.could_not_change_password_userlogin_with_id_not_exist", messageMap, locale); return ServiceUtil.returnError(errMsg); } boolean wasEnabled = !"N".equals(userLoginToUpdate.get("enabled")); if (context.containsKey("enabled")) { userLoginToUpdate.set("enabled", context.get("enabled"), true); } if (context.containsKey("disabledDateTime")) { userLoginToUpdate.set("disabledDateTime", context.get("disabledDateTime"), true); } if (context.containsKey("successiveFailedLogins")) { userLoginToUpdate.set("successiveFailedLogins", context.get("successiveFailedLogins"), true); } // if was disabled and we are enabling it, clear disabledDateTime if (!wasEnabled && "Y".equals(context.get("enabled"))) { userLoginToUpdate.set("disabledDateTime", null); } // if was enabled and we are disabling it, and no disabledDateTime was passed, set it to now if (wasEnabled && "N".equals(context.get("enabled")) && context.get("disabledDateTime") == null) { userLoginToUpdate.set("disabledDateTime", UtilDateTime.nowTimestamp()); } try { userLoginToUpdate.store(); } catch (GenericEntityException e) { Map messageMap = UtilMisc.toMap("errorMessage", e.getMessage()); errMsg = UtilProperties.getMessage(resource,"loginservices.could_not_change_password_write_failure", messageMap, locale); return ServiceUtil.returnError(errMsg); } result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS); return result; } public static void checkNewPassword(GenericValue userLogin, String currentPassword, String newPassword, String newPasswordVerify, String passwordHint, List errorMessageList, boolean ignoreCurrentPassword, Locale locale) { boolean useEncryption = "true".equals(UtilProperties.getPropertyValue("security.properties", "password.encrypt")); String errMsg = null; if (!ignoreCurrentPassword) { String realPassword = currentPassword; if (useEncryption && currentPassword != null) { realPassword = LoginServices.getPasswordHash(currentPassword); } // if the password.accept.encrypted.and.plain property in security is set to true allow plain or encrypted passwords boolean passwordMatches = currentPassword != null && (realPassword.equals(userLogin.getString("currentPassword")) || ("true".equals(UtilProperties.getPropertyValue("security.properties", "password.accept.encrypted.and.plain")) && currentPassword.equals(userLogin.getString("currentPassword")))); if ((currentPassword == null) || (userLogin != null && currentPassword != null && !passwordMatches)) { errMsg = UtilProperties.getMessage(resource,"loginservices.old_password_not_correct_reenter", locale); errorMessageList.add(errMsg); } } if (!UtilValidate.isNotEmpty(newPassword) || !UtilValidate.isNotEmpty(newPasswordVerify)) { errMsg = UtilProperties.getMessage(resource,"loginservices.password_or_verify_missing", locale); errorMessageList.add(errMsg); } else if (!newPassword.equals(newPasswordVerify)) { errMsg = UtilProperties.getMessage(resource,"loginservices.password_did_not_match_verify_password", locale); errorMessageList.add(errMsg); } int minPasswordLength = 0; try { minPasswordLength = Integer.parseInt(UtilProperties.getPropertyValue("security.properties", "password.length.min", "0")); } catch (NumberFormatException nfe) { minPasswordLength = 0; } if (newPassword != null) { if (!(newPassword.length() >= minPasswordLength)) { Map messageMap = UtilMisc.toMap("minPasswordLength", Integer.toString(minPasswordLength)); errMsg = UtilProperties.getMessage(resource,"loginservices.password_must_be_least_characters_long", messageMap, locale); errorMessageList.add(errMsg); } if (userLogin != null && newPassword.equalsIgnoreCase(userLogin.getString("userLoginId"))) { errMsg = UtilProperties.getMessage(resource,"loginservices.password_may_not_equal_username", locale); errorMessageList.add(errMsg); } if (UtilValidate.isNotEmpty(passwordHint) && (passwordHint.toUpperCase().indexOf(newPassword.toUpperCase()) >= 0)) { errMsg = UtilProperties.getMessage(resource,"loginservices.password_hint_may_not_contain_password", locale); errorMessageList.add(errMsg); } } } public static String getPasswordHash(String str) { String hashType = UtilProperties.getPropertyValue("security.properties", "password.encrypt.hash.type"); if (hashType == null || hashType.length() == 0) { Debug.logWarning("Password encrypt hash type is not specified in security.properties, use SHA", module); hashType = "SHA"; } return HashCrypt.getDigestHash(str, hashType); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -