Wildfly 39 JSF Аутентификация входа в системуJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Wildfly 39 JSF Аутентификация входа в систему

Сообщение Anonymous »

Я пытаюсь настроить аутентификацию на основе форм для своего приложения 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
Ответить

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

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

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

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

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