вход в кластер wildfly с помощью java ee 8 security-api - PullRequest
0 голосов
/ 02 июля 2019

мы пытаемся создать кластер Wildfly 16 High Available с API безопасности JEE8. Проект работает как отдельное приложение, но не как кластер! Мы получаем Infispan NotSerializableException.

У нас есть отдельное приложение wildfly 16 с jsf 2.3, CDI 2.0 и Soteria. Это работает как автономный. Теперь мы хотим запустить эту конфигурацию как отдельный кластер wildfly. Полевые мухи приближаются, и они знают друг друга.

Но когда мы вызываем наше приложение, мы получаем следующее исключение: java.lang.IllegalArgumentException: org.infinispan.commons.marshall.NotSerializableException: org.glassfish.soteria.servlet.RequestData

При необходимости мы можем опубликовать всю трассировку стека.

Если мы удалим «распространяемый» из файла web.xml, он будет работать без каких-либо исключений, но тогда мы не сможем разделить сеанс между экземплярами.

Нам не хватает какой-то конфигурации? Или у нас другое недоразумение?

Спасибо за вашу помощь


@AutoApplySession 
@LoginToContinue(loginPage = "/login.xhtml", errorPage = "", useForwardToLogin = true)
@ApplicationScoped
public class CustomAuthenticationMechanism implements HttpAuthenticationMechanism {

    @Inject
    private CustomIdentityStore identityStore;

    ...
}

@Model
public class LoginBean implements Serializable {

    public void login() {
        FacesContext context = FacesContext.getCurrentInstance();
        Credential credential = new CustomCredential(username, password);

        AuthenticationStatus status = securityContext.authenticate(
                (HttpServletRequest) externalContext.getRequest(),
                (HttpServletResponse) externalContext.getResponse(),
                withParams()
                        .credential(credential)
                        .newAuthentication(false)
                        .rememberMe(true)
        );
    ...
    }
}


web.xml:
...
distributable
...

Изменить с 3 июля 2019 года:

Как я теперь вижу, проблема в империменте Сотерии. Я нашел следующий коммит на github: "https://github.com/eclipse-ee4j/soteria/commit/fd9a29c4452f99b426dabc296ec759d36766a56f". Вопрос для меня сейчас, когда это оживает? Каковы его альтернативы, чтобы получить доступ к ресурсам на основе ролей и перенаправить неаутентифицированных пользователей на пользовательскую страницу входа?

1 Ответ

1 голос
/ 02 июля 2019

Кажется, что объект типа org.glassfish.soteria.servlet.RequestData должен быть реплицирован среди нескольких экземпляров вашего кластера. Репликация работает путем сериализации объекта с одной стороны и повторной десериализации его с другой. Это объясняет, почему код работает в некластерной среде.

Однако этот класс, похоже, не реализует java.io.Serializable. Используете ли вы RequestData в любом объекте, который имеет сессионную область?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...