Я пытаюсь настроить аутентификацию на основе форм для своего приложения JSF в Wildfly 39 и нашел следующие источники:
https://rieckpil.de/howto-simple-form-b ... urity-api/
https://www.baeldung.com/java-ee-8-security
Я пытаюсь реализовать подход IdentityStore в коде и настроить @CustomFormAuthenticationMechanismDefinition с помощью моей формы JSF, вызывающей securityContext.authenticate(...), следуя руководству rieckpil.
Я пытался настроить Подсистема Undertow согласно документации:
standalone.xml
И укажите его в jboss-wex.xml:
/
other
Я реализовал специальную реализацию CallerPrincipal, которая хранит мои пользовательские данные, и я ожидаю этого от SecurityContext, но на самом деле произошло следующее:
Каждый раз, когда я пытаюсь войти в систему в первый раз после запуска приложения, оно каждый раз возвращает статус SEND_CONTINUE, даже если это не удается. Однако в случае сбоя сервер защищает ресурсы /app/* и разрешает доступ только тогда, когда я вхожу в систему с действительными входными данными.
Только после того, как я выхожу из системы и снова пытаюсь выполнить те же действия, он возвращает SUCESS или SEND_FAILURE.
Ожидается ли это? Есть ли нюансы, которые я до сих пор игнорировал?
Вот код:
(...)
// LoginBean
@Named
@RequestScoped
public class LoginBean {
@Inject
SecurityContext securityContext;
@Inject
FacesContext facesContext;
private String username; // getter setter
private String password; // getter setter
public void login() {
var status = securityContext.authenticate(
JsfUtil.request(),
JsfUtil.response(),
AuthenticationParameters.withParams().credential(
new UsernamePasswordCredential(username, password)
)
);
if (status == SEND_CONTINUE) {
facesContext.responseComplete();
} else if (status == SUCCESS) {
JsfUtil.redirect("app/home.xhtml");
} else if (status == SEND_FAILURE) {
errorMessage("Login failed", "Invalid credentials");
}
}
}
//IdentityStore
@ApplicationScoped
public class UserIdentityStore implements IdentityStore {
@EJB
UserService userService;
@Override
public CredentialValidationResult validate(Credential credential) {
if (credential instanceof UsernamePasswordCredential upc) {
var u = userService.findUserLogin(upc.getCaller(), upc.getPasswordAsString());
if (u != null) {
return new CredentialValidationResult(new UserCallerPrincipal(u), Set.of("USER"));
}
return CredentialValidationResult.INVALID_RESULT;
}
return CredentialValidationResult.NOT_VALIDATED_RESULT;
}
}
web.xml
App
/app/*
USER
USER
Подробнее здесь: https://stackoverflow.com/questions/798 ... entication
Wildfly 39 JSF Аутентификация входа в систему ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1769795313
Anonymous
Я пытаюсь настроить аутентификацию на основе форм для своего приложения JSF в Wildfly 39 и нашел следующие источники:
https://rieckpil.de/howto-simple-form-based-authentication-for-jsf-2-3-with-java-ee-8-security-api/
https://www.baeldung.com/java-ee-8-security
Я пытаюсь реализовать подход IdentityStore в коде и настроить @CustomFormAuthenticationMechanismDefinition с помощью моей формы JSF, вызывающей securityContext.authenticate(...), следуя руководству rieckpil.
Я пытался настроить Подсистема Undertow согласно документации:
standalone.xml
И укажите его в jboss-wex.xml:
/
other
Я реализовал специальную реализацию CallerPrincipal, которая хранит мои пользовательские данные, и я ожидаю этого от SecurityContext, но на самом деле произошло следующее:
Каждый раз, когда я пытаюсь войти в систему в первый раз после запуска приложения, оно каждый раз возвращает статус SEND_CONTINUE, даже если это не удается. Однако в случае сбоя сервер защищает ресурсы /app/* и разрешает доступ только тогда, когда я вхожу в систему с действительными входными данными.
Только после того, как я выхожу из системы и снова пытаюсь выполнить те же действия, он возвращает SUCESS или SEND_FAILURE.
Ожидается ли это? Есть ли нюансы, которые я до сих пор игнорировал?
Вот код:
(...)
// LoginBean
@Named
@RequestScoped
public class LoginBean {
@Inject
SecurityContext securityContext;
@Inject
FacesContext facesContext;
private String username; // getter setter
private String password; // getter setter
public void login() {
var status = securityContext.authenticate(
JsfUtil.request(),
JsfUtil.response(),
AuthenticationParameters.withParams().credential(
new UsernamePasswordCredential(username, password)
)
);
if (status == SEND_CONTINUE) {
facesContext.responseComplete();
} else if (status == SUCCESS) {
JsfUtil.redirect("app/home.xhtml");
} else if (status == SEND_FAILURE) {
errorMessage("Login failed", "Invalid credentials");
}
}
}
//IdentityStore
@ApplicationScoped
public class UserIdentityStore implements IdentityStore {
@EJB
UserService userService;
@Override
public CredentialValidationResult validate(Credential credential) {
if (credential instanceof UsernamePasswordCredential upc) {
var u = userService.findUserLogin(upc.getCaller(), upc.getPasswordAsString());
if (u != null) {
return new CredentialValidationResult(new UserCallerPrincipal(u), Set.of("USER"));
}
return CredentialValidationResult.INVALID_RESULT;
}
return CredentialValidationResult.NOT_VALIDATED_RESULT;
}
}
web.xml
App
/app/*
USER
USER
Подробнее здесь: [url]https://stackoverflow.com/questions/79879622/wildfly-39-jsf-login-authentication[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия