Вопрос

В настоящее время я работаю над приложением, использующим Spring SAML (http://projects.spring.io/spring-security-saml/) проект как часть нашей аутентификации.Я знаю, что оно все еще находится в версии RC, но и приложение, над которым мы работаем, тоже.У нас есть библиотека, интегрированная и полностью функционирующая при развертывании на Tomcat7, но при развертывании на Weblogic 12c (12.0.1.2) возникают проблемы.В Weblogic без каких-либо ошибок значения утверждений будут расшифрованы как пустые без ошибок.

Проблема, похоже, в библиотеках Xerces.Spring SAML (из-за OpenSAML), насколько я могу судить, требует версии 2.10.0, но Weblogic предоставляет версию 2.8.0 библиотеки Xerces. Я попытался обновить версию библиотеки Xerces, включив соответствующие файлы xercesImpl и xml-apis в файл папка проектов WEB-INF/lib.Это устраняет проблему с дешифрованием в Spring SAML, но нарушает способность Weblogics анализировать страницы JSP.Ниже я включил часть трассировки стека для необновленных и обновленных исключений Xerces.Если у кого-нибудь есть идеи о том, как правильно решить эту проблему, чтобы Spring SAML мог работать с Weblogic, не нарушая при этом функциональность по умолчанию, я был бы очень признателен.

Это трассировка стека перед обновлением Xerces

2014-07-31 10:43:37,675 [[ACTIVE] ExecuteThread: '2' for queue:     'weblogic.kernel.Default (self-tuning)'] DEBUG org.apache.xml.security.algorithms.JCEMapper   - Request for U
RI http://www.w3.org/2001/04/xmlenc#aes256-cbc
2014-07-31 10:43:37,675 [[ACTIVE] ExecuteThread: '2' for queue:    'weblogic.kernel.Default (self-tuning)'] DEBUG org.apache.xml.security.encryption.XMLCipher    - JCE Algorithm
 = AES/CBC/ISO10126Padding
<Jul 31, 2014 10:43:37 AM EDT> <Error> <HTTP> <BEA-101020>     <[ServletContext@1538876008[app:intranet module:intranet.war path:null spec-version:3.0]]    Servlet failed with an
Exception
java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:504)
    at java.lang.Integer.valueOf(Integer.java:582)
    at org.opensaml.common.SAMLVersion.valueOf(SAMLVersion.java:89)
    at org.opensaml.saml2.core.impl.AssertionUnmarshaller.processAttribute(AssertionUnmarshaller.java:71)
    at org.opensaml.xml.io.AbstractXMLObjectUnmarshaller.unmarshallAttribute(AbstractXMLObjectUnmarshaller.java:254)
    at org.opensaml.xml.io.AbstractXMLObjectUnmarshaller.unmarshall(AbstractXMLObjectUnmarshaller.java:113)
    at org.opensaml.xml.encryption.Decrypter.decryptDataToList(Decrypter.java:479)
    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:190)
    at org.springframework.security.saml.SAMLAuthenticationProvider.authenticate(SAMLAuthenticationProvider.java:82)
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)
    at org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:84)

Это трассировка стека после обновления Xerces до версии 2.10.0.

weblogic.servlet.jsp.CompilationException: Failed to compile JSP /WEB-  INF/jsp/errors/500.jsp
500.jsp:1:1: The validator class: "org.apache.taglibs.standard.tlv.JstlCoreTLV" has       failed with the following exception: "java.lang.ClassCastException: weblogic.xml.jaxp.Re
gistrySAXParserFactory cannot be cast to javax.xml.parsers.SAXParserFactory".
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
^-------------------------------------------------------------^
500.jsp:2:5: No tag library could be found with this URI. Possible causes could be that     the URI is incorrect, or that there were errors during parsing of the .tld file.
<%@ taglib prefix="int" uri="intranet"%>
^----^
 500.jsp:2:5: No tag library could be found with this URI. Possible causes could be   that the URI is incorrect, or that there were errors during parsing of the .tld file.
<%@ taglib prefix="int" uri="intranet"%>
^----^
500.jsp:6:3: This tag can only appear as a subelement of a standard or custom action.    Exceptions are: jsp:body, jsp:attribute, jsp:expression, jsp:scriptlet, and jsp:declaration.
    <jsp:attribute name="minifiedJs">
     ^-----------^
 500.jsp:8:3: This tag can only appear as a subelement of a standard or custom action.   Exceptions are: jsp:body, jsp:attribute, jsp:expression, jsp:scriptlet, and jsp:declaration.
    <jsp:attribute name="nonMinifiedJs">
     ^-----------^
  500.jsp:11:3: This tag can only appear as a subelement of a standard or custom action. Exceptions are: jsp:body, jsp:attribute, jsp:expression, jsp:scriptlet, and jsp:declaration.
    <jsp:body>
     ^------^

    at weblogic.servlet.jsp.JavelinxJSPStub.reportCompilationErrorIfNeccessary(JavelinxJSPStub.java:243)
    at weblogic.servlet.jsp.JavelinxJSPStub.compilePage0(JavelinxJSPStub.java:179)
    at weblogic.servlet.jsp.JavelinxJSPStub.access$000(JavelinxJSPStub.java:50)
    at weblogic.servlet.jsp.JavelinxJSPStub$1.run(JavelinxJSPStub.java:108)
    at java.security.AccessController.doPrivileged(Native Method)
    at weblogic.servlet.jsp.JavelinxJSPStub.compilePage(JavelinxJSPStub.java:105)
    at weblogic.servlet.jsp.JspStub.prepareServlet(JspStub.java:247)
    at weblogic.servlet.jsp.JspStub.prepareServlet(JspStub.java:200)
    at weblogic.servlet.internal.ServletStubImpl.getServlet(ServletStubImpl.java:403)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:295)
    at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:478)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:367)
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    ...
Это было полезно?

Решение

Следующий подход позволяет объединить пользовательские библиотеки Xerces и Xalan в Weblogic:

  1. Создать ушной архив spring-security-saml2-sample.ear
  2. Включить файл Spring SAML spring-security-saml2-sample.war внутри уха война должна содержать собственную версию Ксерцеса и Ксалана.
  3. Создать файл META-INF/application.xml внутри уха со следующим содержанием:

    <application xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5">
      <module>
        <web>
          <web-uri>spring-security-saml2-sample.war</web-uri>
          <context-root>spring-security-saml2-sample</context-root>
        </web>
      </module>
    </application>
    
  4. Создать файл META-INF/weblogic-application.xml со следующим содержанием:

    <weblogic-application xmlns="http://www.bea.com/ns/weblogic/90"
                          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                          xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.oracle.com/technology/weblogic/920/weblogic-application.xsd">
        <xml>
            <parser-factory>
                <saxparser-factory>
                    org.apache.xerces.jaxp.SAXParserFactoryImpl
                </saxparser-factory>
                <document-builder-factory>
                    org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
                </document-builder-factory>
                <transformer-factory>
                    org.apache.xalan.processor.TransformerFactoryImpl
                </transformer-factory>
            </parser-factory>
        </xml>
        <prefer-application-packages>
            <package-name>org.opensaml.*</package-name>
            <package-name>org.apache.xerces.*</package-name>
            <package-name>org.apache.xalan.*</package-name>
        </prefer-application-packages>                       
    </weblogic-application>
    
  5. Развернуть архив

Другие советы

Для всех, кто приходит на это позже.Я закончил решить проблему, обновив до Xercesimpl версии 2.9.0.Это, похоже, это сладкая точечная версия для этой проблемы, даже если она меньше, чем запрашивает запросы OpenSAML, это исправляет вопрос, не вызывая никаких других проблем с Weblogic (насколько я в настоящее время встречаюсь).Xerces 2.10.0 Требуется обновленная версия XML-API-API для функционирования и что вызывает проблемы с Weblogic (2.9.0, кажется, работает с версией XML-API, включенных в Weblogic).

Вы играли с prefer-web-inf-classes для файла войны или prefer-application-packages для файла уха?Один из них, вероятно, решает проблему:

в Weblogic-Application.xml:

<wls:prefer-application-packages>
    <wls:package-name>org.apache.xerces.xni.parser.*</wls:package-name>
    <wls:package-name>org.apache.xerces.parsers.*</wls:package-name>
    <wls:package-name>org.apache.xalan.*</wls:package-name>
</wls:prefer-application-packages>
.

в weblogic.xml:

<wls:container-descriptor>
    <wls:prefer-web-inf-classes>true</prefer-web-inf-classes>
</wls:container-descriptor>
.

Смотрите эти Oracle Docs здесь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top