2015-06-25 9 views
1

Использование Spring-security-saml для обработки утверждений от IDP, получение ниже ошибки после того, как сервер достигнет 1 - 2 часов. Проблема не воспроизводится все время. Рассмотрев stacktrace, проблема, похоже, связана с пулом парсеров, используемым в конфигурации весеннего saml. Пожалуйста, поделитесь мыслями.SpringSecurity-SAML (OpenSAML): Не удалось отменить утверждение: получение org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR

библиотека версии: opensaml 2.6.1 весна-безопасности saml2 1.0.0.RELEASE

анализатор пула конфигурации:

<bean id="parserPool" class="org.opensaml.xml.parse.StaticBasicParserPool" init-method="initialize"> 
    <property name="builderFeatures"> 
     <map> 
      <entry key="http://apache.org/xml/features/dom/defer-node-expansion" value="false"/> 
     </map> 
    </property> 
</bean> 
<bean id="parserPoolHolder" class="org.springframework.security.saml.parser.ParserPoolHolder"/> 

org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: узел используется в другом документе, чем тот, который его создал. at org.apache.xerces.dom.ParentNode.internalInsertBefore (Неизвестный источник) at org.apache.xerces.dom.ParentNode.insertBefore (Неизвестный источник) at org.apache.xerces.dom.NodeImpl.appendChild (Неизвестный источник) at org.opensaml.xml.encryption.Decrypter.parseInputStream (Decrypter.java:821) at org.opensaml.xml.encryption.Decrypter.decryptDataToDOM (Decrypter.java:599) at org.opensaml.xml.encryption .Decrypter.decryptUsingResolvedEncryptedKey (Decrypter.java:784) на org.opensaml.xml.encryption.Decrypter.decryptDataToDOM (Decrypter.java:524) в org.opensaml.xml.encryption.Decrypter.decryptDataToList (Decrypter.java:442) at org.opensaml.xml.encryption.Decrypter.decryptData (Decrypter.java:403) at org.opensaml.saml2.encryption.Decrypter.decryptData (Decrypter.java:141) at org.opensaml.saml2.encryption.Decrypter.decrypt (Decrypter.java:69) at org.springframework.security.saml. websso.WebSSOProfileConsumerImpl.processAuthenticationResponse (WebSSOProfileConsumerImpl.java:199) в org.springframework.security.saml.SAMLAuthenticationProvider.authenticate (SAMLAuthenticationProvider.java:82)

+0

чек ниже ссылку, если это поможет http://stackoverflow.com/questions/30341590/getting-error-while-decryptition-of- saml-token – ManojP

+1

Обнаружена проблема. Мой проект также имеет docx4j, используемый для обработки текстового документа, docx4j изменил системное свойство javax.xml.parsers.DocumentBuilderFactory, когда он инициализирован, который внутренне вызвал реализацию реализации DocumentBuilderFactory, отличной от той, которая была открыта, была инициализирована. – Srini

ответ

2

первопричины: Несколько реализаций Xerces в проекте.

Обнаружена проблема. Мой проект также имеет docx4j, используемый для обработки текстового документа, docx4j изменил системное свойство javax.xml.parsers.DocumentBuilderFactory на «com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl», когда он инициализирован, и если системное свойство еще не установлена ​​и java-версия < 8, которая внутренне вызвала реализацию реализации DocumentBuilderFactory, отличную от той, которая была инициализирована opensaml. т.е. org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

Fix устанавливает системное свойство javax.xml.parsers.DocumentBuilderFactory в com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl с помощью следующей Java вариант выполнения

-Djavax.xml.parsers.DocumentBuilderFactory = com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

0

Как сказал @Srini, основной причиной является множество реализаций Xerces в проекте.

Я решил это переопределение свойства docx4j в docx4j.properties:

javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl