3

私は現在、認証の一部として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 は Xerces ライブラリの 2.8.0 を提供します。適切な xercesImpl および xml-apis jar をプロジェクトの WEB-INF/lib フォルダー。これにより、Spring SAML の復号化の問題が修正されますが、JSP ページを解析する Weblogics の機能が損なわれます。以下に、アップグレードされていない Xerces 例外とアップグレードされた 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)
    ...
4

3 に答える 3

2

後でこれに出くわす人のために。xercesImpl バージョン 2.9.0 に更新することで問題を解決しました。これは、OpenSAML が要求するものよりは少ないものの、Weblogic で他の問題を引き起こさずに (私が現在遭遇した限り)、この問題のスイート スポット バージョンのようです。Xerces 2.10.0 が機能するには xml-apis の更新バージョンが必要であり、Weblogic で問題が発生していました (2.9.0 は、Weblogic に含まれる xml-apis のバージョンで動作するようです)。

于 2014-07-31T20:27:26.590 に答える
1

次のアプローチにより、Weblogic でカスタム Xerces および Xalan ライブラリをバンドルできます。

  1. 耳のアーカイブを作成するspring-security-saml2-sample.ear
  2. ear 内にSpring SAML ファイルを含めますspring-security-saml2-sample.war。war には Xerces と Xalan の独自のバージョンが含まれている必要があります。
  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. アーカイブをデプロイする

于 2014-08-02T10:48:45.493 に答える
0

prefer-web-inf-classeswar ファイルやprefer-application-packagesear ファイルで遊んだことはありますか? それらのいずれかで問題が解決する可能性があります。

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 ドキュメントを参照してください。

于 2014-07-31T15:30:15.310 に答える