Oracle ADF, как выполнить запрос за один сеанс?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Oracle ADF, как выполнить запрос за один сеанс?

Сообщение Anonymous »

Помогите! У меня такая проблема, проект Oracle adf Jdeveloper Studio Edition версии 12.2.1.0.0. У меня есть форма авторизации:




































и на ней есть кнопка смены пароля для пользователя, то есть на форме две кнопки ВОЙТИ и СМЕНИТЬ ПАРОЛЬ, и три поля для ввода текста, это ПОЧТОВЫЙ ИНДЕКС, ЛОГИН ПОЛЬЗОВАТЕЛЯ и ПАРОЛЬ. Теперь у меня есть задача, когда пользователь хочет войти в систему, к кнопке ВХОД привязан метод doLogin().
public synchronized String doLogin() {

FacesContext fctx = FacesContext.getCurrentInstance();
fctx.getViewRoot().setLocale(new Locale("ru_RU"));

ExternalContext ectx = fctx.getExternalContext();
HttpServletRequest request = (HttpServletRequest) ectx.getRequest();

MDC.put("userInfo", zipcode + "/" + login);

if (StringUtil.isBlank(login) || StringUtil.isBlank(password) || zipcode == null) {
UserMessage.error(BelpostBundleManager.getMessage(MessageKeys.ERROR_INVALID_SIGN_IN));
return null;
}

Map params = new HashMap();
params.put("login", login);
params.put("zipcode", zipcode);

OperationResult userResult = (OperationResult) ADFBindingsUtil.executeOperationBinding("loadUserData", params);

if (userResult.failed()) {
log.warn(userResult.getSystemMessage());
UserMessage.error(userResult.getUserMessage());
return null;
}
UserData userData = (UserData) userResult.getValue();

try {

if (!_doLoginBool(request, userData.getUserName(), this.password)) {
throw new UnexpectedException("Login attempt failed");
}

if (userData.isDisabled()) {
throw new UnexpectedException("user " + userData.getUserName() + " is disabled",
"User is blcok");
}

OperationResult orgResult =
(OperationResult) ADFBindingsUtil.executeOperationBinding("loadOrgData", "zipcode", zipcode);
if (orgResult.failed()) {
throw new UnexpectedException("Can't load org data", orgResult.getUserMessage());
}
userData.setOrgData((OrgData) orgResult.getValue());
if (!userData.getOrgData().isActive()) {
throw new NotValidParametersException("inactive org zipcode: " + zipcode,
"department '" + userData.getOrgData().getOrgName() + "' (" +
zipcode + ") not active");
}

if (userData.getPasswNextUpdated() != null) {
restDays = userData.getPasswWarn();
}

if (userData.isPasswNeedUpdate() && (userData.getPasswNextUpdated() != null) && userData.getPasswWarn()!=null) {

staticPassword = password;
staticLogin = login;
userDataStatic = userData;
id = userData.getId();
staticRequest = request;
staticFctx = fctx;
staticZipcode = zipcode;

if ((userData.getPasswWarn() == 0 || userData.getPasswWarn() < 0)) {
UIComponentUtil.show("newPass");
return null;
}

else if (userData.getPasswWarn() > 0) {
UIComponentUtil.show("newPassTenDays");
return null;
}

return null;
}

SecurityUtil.setCurrentUserData(userData);
SessionUtil.clearSessionCustomValues();
log.info("Login succeeded. Roles: " + SecurityUtil.getCurrentRoles());

ViewHandler vh = fctx.getApplication().getViewHandler();
UIViewRoot viewRoot = vh.createView(fctx, "/rootPage.jsf");
fctx.setViewRoot(viewRoot);
fctx.renderResponse();

} catch (FailedLoginException e) {
log.warn("FailedLoginException");
UserMessage.error(BelpostBundleManager.getMessage(MessageKeys.ERROR_INVALID_SIGN_IN));
} catch (LoginException e) {
log.warn("LoginException");
UserMessage.error(Entry error. user is block");
} catch (Exception e) {
ExceptionManager.logError(e.getMessage(), e);
UserMessage.error(ExceptionManager.exToCheckedLocalized(e).getLocalizedMessage());
ServletAuthentication.done(request);
}

return null;
}

Ввел все данные для входа, нажал войти и на данный момент, в этом методе у меня есть проверка, что если пользователь первый раз заходит в систему, он должен изменить пароль.
if (userData.isPasswNeedUpdate() && (userData.getPasswNextUpdated() != null) && userData.getPasswWarn()!=null) {

staticPassword = password;
staticLogin = login;
userDataStatic = userData;
id = userData.getId();
staticRequest = request;
staticFctx = fctx;
staticZipcode = zipcode;

if ((userData.getPasswWarn() == 0 || userData.getPasswWarn() < 0)) {
UIComponentUtil.show("newPass");
return null;
}

else if (userData.getPasswWarn() > 0) {
UIComponentUtil.show("newPassTenDays");
return null;
}

return null;
}

Открывается всплывающее окно, в котором я ввожу старый пароль, новый пароль и подтверждение пароля.




























Кроме того, номер почтового отделения и данные для входа я беру из формы авторизации. Во всплывающем окне только одна кнопка, это нормально, поскольку пользователь должен сменить пароль и войти в систему. При нажатии кнопки ОК выполняется метод смены пароля.
public synchronized void userPasswDialogSubmit(ActionEvent actionEvent) {

if (oldPassword == null || newPassword == null || confirmPassword == null) {
UserMessage.error("Required FIELDS");
} else {
if (!oldPassword.equals(staticPassword)) {
UserMessage.error("Incorrect password for user " + userDataStatic.getLogin());
} else {
Integer answer = updatePassword(newPassword, confirmPassword, userDataStatic.getId(), staticPassword);
if (answer != 0) {
UIComponentUtil.hide("newPass");
UIComponentUtil.hide("newPassTenDays");
UserMessage.info("To log in, enter a new password.");
resetStaticValue();
}

}

}
}

Вопрос в том, как передать в метод смены пароля индекс логина и почты?
В начале класса LoginBean я объявляю статические переменные, в которых буду введите поля из формы авторизации, это staticZipcode, staticLogin и staticPassword, а затем примите эти значения для работы во всплывающем окне. Я делаю это правильно? Читал, что возможны ошибки при высокой нагрузке на систему, когда приложением будет пользоваться большое количество пользователей. Что делать в этой ситуации?
public class LoginBean extends AModuleBase {

private String login, password;
private Long zipcode;

private String oldPassword;
private String newPassword;
private String confirmPassword;

private static Long id;
private static String staticPassword;
private static String staticLogin;
private static UserData userDataStatic;
private static HttpServletRequest staticRequest;
private static FacesContext staticFctx;
private static Long staticZipcode;
private Integer restDays;

Возможно, для работы со статическими переменными их нужно вводить в такой форме?
AdfFacesContext.getCurrentInstance().getViewScope().put("staticPassword", password);
AdfFacesContext.getCurrentInstance().getViewScope().put("staticLogin", login);
AdfFacesContext.getCurrentInstance().getViewScope().put("userDataStatic", userData);
AdfFacesContext.getCurrentInstance().getViewScope().put("staticZipcode", zipcode);


Подробнее здесь: https://stackoverflow.com/questions/789 ... ne-session
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»