Невозможно использовать WSO2 в качестве сервера идентификации, когда мое приложение работает в JBOSS EAP 7.0

Я пытаюсь использовать WSO2 5.3.0 в качестве сервера идентификации.

Мое приложение работает в JBOSS EAP 7.0, а WSO2 работает в Tomcat, который поставляется вместе с ним.

Я следовал этому документу из ws02 и может успешно выполнять единый вход, когда пример приложения работает в tomcat. Но когда я развертываю то же приложение в JBOSS EAP 7.0, я получаю эту ошибку, когда нажимаю URL-адрес приложения.

ОШИБКА [io.undertow.request] (задача по умолчанию-2) UT005023: запрос обработки исключений на /travevlocity.com: java.lang.IllegalStateException: UT010041: контекст сервлета уже инициализирован, вы можете вызывать этот метод только из ServletContainerInitializer или ServletContextListener в io.undertow.servlet.spec.ServletContextImpl.ensureNotInitialized(ServletContextImpl.java:778) в io.undertow.servlet.spec.ServletContextImpl.addListener(ServletContextImpl.java:653) в io.undertow.servlet.spec. ServletContextImpl.addListener(ServletContextImpl.java:632) в org.wso2.carbon.identity.sso.agent.SSOAgentFilter.init(SSOAgentFilter.java:57)

В WSO2 это метод инициализации SSOAgentFilter.

public void init(FilterConfig fConfig)
                throws ServletException
            {
                try
                    {
                        SSOAgentConfigs.initConfig(fConfig);
                        SSOAgentConfigs.initCheck();
                        samlSSOManager = new SAML2SSOManager();
                        openIdManager = new OpenIDManager();
                        fConfig.getServletContext().addListener("org.wso2.carbon.identity.sso.agent.saml.SSOAgentHttpSessionListener");
                    } catch(SSOAgentException e){
                        LOGGER.log(Level.SEVERE, "An error has occurred", e);
                        throw e;
                    }
            }

Я думаю, что проблема связана с JBOSS EAP 7.0, который использует undertow в качестве реализации API сервлета. Вот фрагмент кода ServletContextImpl из undertow.

 @Override
    public void addListener(final Class<? extends EventListener> listenerClass) {
        ensureNotInitialized();
        ensureNotProgramaticListener();
        if (ApplicationListeners.listenerState() != NO_LISTENER
                && ServletContextListener.class.isAssignableFrom(listenerClass)) {
            throw UndertowServletMessages.MESSAGES.cannotAddServletContextListener();
        }
        InstanceFactory<? extends EventListener> factory = null;
        try {
            factory = deploymentInfo.getClassIntrospecter().createInstanceFactory(listenerClass);
        } catch (Exception e) {
            throw new IllegalArgumentException(e);
        }
        final ListenerInfo listener = new ListenerInfo(listenerClass, factory);
        deploymentInfo.addListener(listener);
        deployment.getApplicationListeners().addListener(new ManagedListener(listener, true));
    }

Перед добавлением любого слушателя они проверяют, инициализирован ли ServletContext или нет. И если он уже инициализирован, мы не можем добавить к нему никакого слушателя.

Но в реализации Tomcat или других контейнеров это не проверяется. Значит там нормально работает.

Можем ли мы что-нибудь сделать, чтобы решить эту проблему. Я могу использовать только Jboss EAP 7.0 в качестве сервера в своем приложении. Пожалуйста помоги.


person Bhawani shankar Panda    schedule 21.02.2017    source источник
comment
У меня такая же проблема. Были ли у вас какие-либо намеки в этом направлении?   -  person quma    schedule 07.08.2017


Ответы (1)


JBoss EAP 7.0 не использует Tomcat в качестве контейнера сервлетов, как в предыдущих версиях. Это может быть причиной несовместимости. Однако использование более новой версии зависимости решит эту проблему.

<dependency>
       <groupId>org.wso2.carbon.identity.agent.sso.java</groupId>
       <artifactId>org.wso2.carbon.identity.sso.agent</artifactId>
       <version>5.1.3</version>
</dependency>

Вы можете попробовать последнюю версию примера здесь, sso-agent-sample

person Nipun Thathsara    schedule 16.08.2017