📄 loginservices.java
字号:
Transaction parentTx = null;
boolean beganTransaction = false;
try {
if (txMgr != null) {
try {
parentTx = txMgr.suspend();
beganTransaction = TransactionUtil.begin();
} catch (SystemException se) {
Debug.logError(se, "Cannot suspend transaction: " + se.getMessage(), module);
} catch (GenericTransactionException e) {
Debug.logError(e, "Cannot begin nested transaction: " + e.getMessage(), module);
}
}
if (doStore) {
try {
userLogin.store();
} catch (GenericEntityException e) {
Debug.logWarning(e, "", module);
}
}
if ("true".equals(UtilProperties.getPropertyValue("security.properties", "store.login.history"))) {
boolean createHistory = true;
if (isServiceAuth && !"true".equals(UtilProperties.getPropertyValue("security.properties", "store.login.history.on.service.auth"))) {
createHistory = false;
}
if (createHistory) {
try {
delegator.create("UserLoginHistory", UtilMisc.toMap("userLoginId", username, "visitId", visitId,
"fromDate", UtilDateTime.nowTimestamp(), "passwordUsed", password,
"partyId", userLogin.get("partyId"), "successfulLogin", successfulLogin));
} catch (GenericEntityException e) {
Debug.logWarning(e, "", module);
}
}
}
try {
TransactionUtil.commit(beganTransaction);
} catch (GenericTransactionException e) {
Debug.logError(e, "Could not commit nested transaction: " + e.getMessage(), module);
}
} finally {
// resume/restore parent transaction
if (parentTx != null) {
try {
txMgr.resume(parentTx);
Debug.logVerbose("Resumed the parent transaction.", module);
} catch (InvalidTransactionException ite) {
Debug.logError(ite, "Cannot resume transaction: " + ite.getMessage(), module);
} catch (SystemException se) {
Debug.logError(se, "Unexpected transaction error: " + se.getMessage(), module);
}
}
}
} else {
// account is disabled, but this may be the result of a stale cache entry,
// so lets clear the cache and try again if this is the first pass
if (isServiceAuth && passNumber <= 1) {
delegator.clearCacheLine("UserLogin", UtilMisc.toMap("userLoginId", username));
repeat = true;
continue;
}
errMsg = "The account for user login id \"" + username + "\" has been disabled";
if (disabledDateTime != null) {
errMsg += " since " + disabledDateTime + ".";
} else {
errMsg += ".";
}
if (loginDisableMinutes > 0 && reEnableTime != null) {
errMsg += " It will be re-enabled " + reEnableTime + ".";
} else {
errMsg += " It is not scheduled to be re-enabled.";
}
}
} else {
// userLogin record not found, user does not exist
errMsg = "User not found.";
Debug.logInfo("[LoginServices.userLogin] : Invalid User : " + errMsg, module);
}
}
}
if (errMsg.length() > 0) {
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_ERROR);
result.put(ModelService.ERROR_MESSAGE, errMsg);
}
return result;
}
/** Creates a UserLogin
*@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 createUserLogin(DispatchContext ctx, Map context) {
Map result = new HashMap();
GenericDelegator delegator = ctx.getDelegator();
Security security = ctx.getSecurity();
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");
String partyId = (String) context.get("partyId");
String currentPassword = (String) context.get("currentPassword");
String currentPasswordVerify = (String) context.get("currentPasswordVerify");
String passwordHint = (String) context.get("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 (party != null) {
if (loggedInUserLogin != null) {
// <b>security check</b>: userLogin partyId must equal partyId, or must have PARTYMGR_CREATE permission
if (!partyId.equals(loggedInUserLogin.getString("partyId"))) {
if (!security.hasEntityPermission("PARTYMGR", "_CREATE", loggedInUserLogin)) {
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");
}
}
}
checkNewPassword(null, null, currentPassword, currentPasswordVerify, passwordHint, errorMessageList, true);
GenericValue userLoginToCreate = delegator.makeValue("UserLogin", UtilMisc.toMap("userLoginId", userLoginId));
userLoginToCreate.set("passwordHint", passwordHint);
userLoginToCreate.set("partyId", partyId);
userLoginToCreate.set("currentPassword", useEncryption ? HashEncrypt.getHash(currentPassword) : currentPassword);
try {
if (delegator.findByPrimaryKey(userLoginToCreate.getPrimaryKey()) != null) {
errorMessageList.add("Could not create login user: user with ID \"" + userLoginId + "\" already exists");
}
} catch (GenericEntityException e) {
Debug.logWarning(e, "", module);
errorMessageList.add("Could not create login user (read failure): " + e.getMessage());
}
if (errorMessageList.size() > 0) {
return ServiceUtil.returnError(errorMessageList);
}
try {
userLoginToCreate.create();
} catch (GenericEntityException e) {
Debug.logWarning(e, "", module);
return ServiceUtil.returnError("Could create login user (write failure): " + e.getMessage());
}
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
return result;
}
/** Updates UserLogin Password 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 updatePassword(DispatchContext ctx, Map context) {
Map result = new HashMap();
GenericDelegator delegator = ctx.getDelegator();
Security security = ctx.getSecurity();
GenericValue loggedInUserLogin = (GenericValue) context.get("userLogin");
boolean useEncryption = "true".equals(UtilProperties.getPropertyValue("security.properties", "password.encrypt"));
boolean adminUser = false;
String userLoginId = (String) context.get("userLoginId");
if (userLoginId == null || userLoginId.length() == 0) {
userLoginId = loggedInUserLogin.getString("userLoginId");
}
// <b>security check</b>: userLogin userLoginId must equal userLoginId, or must have PARTYMGR_UPDATE permission
// NOTE: must check permission first so that admin users can set own password without specifying old password
if (!security.hasEntityPermission("PARTYMGR", "_UPDATE", loggedInUserLogin)) {
if (!userLoginId.equals(loggedInUserLogin.getString("userLoginId"))) {
return ServiceUtil.returnError("You do not have permission to update the password for this user login");
}
} else {
adminUser = true;
}
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");
}
String currentPassword = (String) context.get("currentPassword");
String newPassword = (String) context.get("newPassword");
String newPasswordVerify = (String) context.get("newPasswordVerify");
String passwordHint = (String) context.get("passwordHint");
if ("true".equals(UtilProperties.getPropertyValue("security.properties", "password.lowercase"))) {
currentPassword = currentPassword.toLowerCase();
newPassword = newPassword.toLowerCase();
newPasswordVerify = newPasswordVerify.toLowerCase();
}
List errorMessageList = new LinkedList();
if (newPassword != null && newPassword.length() > 0) {
checkNewPassword(userLoginToUpdate, currentPassword, newPassword, newPasswordVerify,
passwordHint, errorMessageList, adminUser);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -