Frage

Ich arbeite derzeit an einer Anwendung, die Spring SAML nutzt (http://projects.spring.io/spring-security-saml/)-Projekt im Rahmen unserer Authentifizierung.Ich weiß, dass es noch in RC ist, aber das gilt auch für die Anwendung, an der wir arbeiten.Bei der Bereitstellung auf Tomcat7 ist die Bibliothek integriert und voll funktionsfähig, bei der Bereitstellung auf Weblogic 12c (12.0.1.2) treten jedoch Probleme auf.Auf Weblogic werden die Assertionswerte ohne das Auslösen von Fehlern als leer entschlüsselt, ohne Fehler.

Das Problem scheint in den Xerces-Bibliotheken zu liegen.Soweit ich das beurteilen kann, erfordert Spring SAML (aufgrund von OpenSAML) 2.10.0, aber Weblogic stellt 2.8.0 der Xerces-Bibliothek bereit. Ich habe versucht, die Version der Xerces-Bibliothek zu aktualisieren, indem ich die richtigen xercesImpl- und xml-apis-Jars in die eingefügt habe Projekte Ordner WEB-INF/lib.Dies behebt das Entschlüsselungsproblem mit Spring SAML, beeinträchtigt jedoch die Fähigkeit von Weblogics, JSP-Seiten zu analysieren.Ich habe unten einen Teil des Stack-Trace für die nicht aktualisierten und aktualisierten Xerces-Ausnahmen eingefügt.Wenn jemand eine Idee hat, wie dieses Problem richtig behoben werden kann, damit Spring SAML mit Weblogic funktionieren kann, ohne die Standardfunktionalität zu beeinträchtigen, wäre ich sehr dankbar.

Dies ist der Stack-Trace vor der Aktualisierung von 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)

Dies ist der Stacktrace nach dem Update von Xerces auf 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)
    ...
War es hilfreich?

Lösung

Der folgende Ansatz ermöglicht die Bündelung benutzerdefinierter Xerces- und Xalan-Bibliotheken in Weblogic:

  1. Ohrarchiv erstellen spring-security-saml2-sample.ear
  2. Fügen Sie die Spring SAML-Datei hinzu spring-security-saml2-sample.war Im Ohr sollte der Krieg eine eigene Version von Xerces und Xalan enthalten.
  3. Erstelle Datei META-INF/application.xml im Ohr mit folgendem Inhalt:

    <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. Erstelle Datei META-INF/weblogic-application.xml mit folgendem Inhalt:

    <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. Stellen Sie das Archiv bereit

Andere Tipps

für alle, die später hierher kommen.Ich habe das Problem gelöst, indem ich auf XERCESIMPL Version 2.9.0 aktualisiert wurde.Dies scheint eine Sweet Spot-Version für dieses Problem zu sein, obwohl es weniger ist, ob OpenSAML-Anfragen das Problem behoben, während er keine anderen Probleme mit Weblogic verursacht (soweit ich derzeit bin ich derzeit bin).XERCES 2.10.0 Erfordert eine aktualisierte Version von XML-APIs, um zu funktionieren, und das verursachte die Probleme mit Weblogic (2.9.0 scheint mit der Version von XML-APIs in Weblogic zu arbeiten).

Hast du mit gespielt? prefer-web-inf-classes für eine Kriegsakte bzw prefer-application-packages für eine Ohrenfeile?Einer von ihnen wird das Problem wahrscheinlich lösen:

In 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>

In weblogic.xml:

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

Sehen Sie sich diese an Oracle-Dokumente hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top