Question

Je suis actuellement en train de travailler sur une application qui utilise le Printemps SAML (http://projects.spring.io/spring-security-saml/ projet dans le cadre de notre authentification.Je sais qu'il est encore en RC mais c'est l'application de notre travail.Nous avons la bibliothèque intégrée et qui fonctionne parfaitement lorsqu'il est déployé à Tomcat7, mais sont en train de problèmes lors du déploiement de Weblogic 12c (12.0.1.2).Sur Weblogic, sans jeter toutes les erreurs de l'affirmation de valeurs sera decrpyted comme vide pas d'erreurs.

Le problème semble être dans la Xerces bibliothèques.Printemps SAML (en raison de OpenSAML) exige 2.10.0 autant que je suis capable de le dire, mais Weblogic fournit 2.8.0 de la Xerces de la bibliothèque.J'ai tenté de mettre à jour Xerces version de bibliothèque en incluant la xercesImpl et xml api pots dans les projets WEB-INF/lib du dossier.Ceci résout le decrpyting problème avec le Printemps, SAML, mais les sauts de Weblogics capacité d'analyser des pages JSP.J'ai inclus une partie de la trace de la pile pour la non-mise à jour et mise à niveau Xerces exceptions ci-dessous.Si quelqu'un a une idée de comment résoudre ce problème de sorte que le Printemps SAML peut fonctionner de Weblogic en pas de rupture de la fonctionnalité par défaut, je serais très heureux.

C'est la trace de la pile avant la mise à jour de 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)

C'est la trace de la pile après la mise à jour de Xerces pour 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)
    ...
Était-ce utile?

La solution

L'approche suivante permet le regroupement de la coutume Xerces et Xalan bibliothèques dans Weblogic:

  1. Créer oreille archive spring-security-saml2-sample.ear
  2. Inclure Printemps SAML fichier spring-security-saml2-sample.war l'intérieur de l'oreille, la guerre doit contenir propre version de Xerces et Xalan.
  3. Créer le fichier META-INF/application.xml l'intérieur de l'oreille avec le contenu suivant:

    <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. Créer le fichier META-INF/weblogic-application.xml avec le contenu suivant:

    <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. Déployer l'archive

Autres conseils

pour quiconque qui vient sur cela plus tard.J'ai fini par résoudre le problème en mettant à jour la version 2.9.0 de Xercesimpl.Cela semble être une version de tache douce pour ce problème, même si elle est inférieure à ce que OpenSaml demande qu'il corrige le problème tout en ne faisant pas causer d'autres problèmes avec Weblogic (autant que j'ai rencontré actuellement).XERCES 2.10.0 Requis Une version mise à jour de XML-API sur la fonction et qui causait les problèmes avec Weblogic (2.9.0 semble fonctionner avec la version de XML-API inclus dans Weblogic).

Avez-vous joué avec prefer-web-inf-classes pour un fichier war ou prefer-application-packages pour un fichier ear?L'un d'entre eux sera probablement résoudre le problème:

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

Dans weblogic.xml:

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

Voir ces Oracle docs ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top