📄 loginservices.java
字号:
if (errorMessageList.size() > 0) {
return ServiceUtil.returnError(errorMessageList);
}
userLoginToUpdate.set("currentPassword", useEncryption ? HashEncrypt.getHash(newPassword) : newPassword, false);
userLoginToUpdate.set("passwordHint", passwordHint, false);
try {
userLoginToUpdate.store();
} catch (GenericEntityException e) {
return ServiceUtil.returnError("Could not change password (write failure): " + e.getMessage());
}
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
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();
//boolean useEncryption = "true".equals(UtilProperties.getPropertyValue("security.properties", "password.encrypt"));
String userLoginId = (String) context.get("userLoginId");
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"))) {
errorMessageList.add("Party with specified party ID exists and you do not have permission to create a user login with this party ID");
}
} else {
errorMessageList.add("You must be logged in and have permission to create a user login with a party ID for a party that already exists");
}
}
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);
errorMessageList.add("Could not create login user (read failure): " + e.getMessage());
}
if (newUserLogin != null) {
if (!newUserLogin.get("partyId").equals(partyId)) {
errorMessageList.add("Could not create login user: user with ID \"" + userLoginId + "\" already exists");
} 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);
return ServiceUtil.returnError("Couldn't create login user (write failure): " + e.getMessage());
}
loggedInUserLogin.set("enabled", "N");
loggedInUserLogin.set("disabledDateTime", UtilDateTime.nowTimestamp());
try {
loggedInUserLogin.store();
} catch (GenericEntityException e) {
Debug.logWarning(e, "", module);
return ServiceUtil.returnError("Couldn't disable old login user (write failure): " + e.getMessage());
}
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");
String userLoginId = (String) context.get("userLoginId");
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)) {
return ServiceUtil.returnError("You do not have permission to update the security info for this user login");
}
GenericValue userLoginToUpdate = null;
try {
userLoginToUpdate = delegator.findByPrimaryKey("UserLogin", UtilMisc.toMap("userLoginId", userLoginId));
} catch (GenericEntityException e) {
return ServiceUtil.returnError("Could not change password (read failure): " + e.getMessage());
}
if (userLoginToUpdate == null) {
return ServiceUtil.returnError("Could not change password, UserLogin with ID \"" + userLoginId + "\" does not exist");
}
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) {
return ServiceUtil.returnError("Could not change password (write failure): " + e.getMessage());
}
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) {
boolean useEncryption = "true".equals(UtilProperties.getPropertyValue("security.properties", "password.encrypt"));
if (!ignoreCurrentPassword) {
String realPassword = currentPassword;
if (useEncryption && currentPassword != null) {
realPassword = HashEncrypt.getHash(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)) {
errorMessageList.add("Old Password was not correct, please re-enter.");
}
}
if (!UtilValidate.isNotEmpty(newPassword) || !UtilValidate.isNotEmpty(newPasswordVerify)) {
errorMessageList.add("Password or verify password missing.");
} else if (!newPassword.equals(newPasswordVerify)) {
errorMessageList.add("Password did not match verify password");
}
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)) {
errorMessageList.add("Password must be at least " + minPasswordLength + " characters long");
}
if (userLogin != null && newPassword.equalsIgnoreCase(userLogin.getString("userLoginId"))) {
errorMessageList.add("Password may not equal the Username");
}
if (UtilValidate.isNotEmpty(passwordHint) && (passwordHint.toUpperCase().indexOf(newPassword.toUpperCase()) >= 0)) {
errorMessageList.add("Password hint may not contain the password");
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -