Java Weblogic 12c上的Spring SAML
我目前正在开发一个应用程序,该应用程序使用springsaml()项目作为身份验证的一部分。我知道它仍然在RC中,但我们正在开发的应用程序也是如此。在部署到Tomcat7时,我们已经集成了该库,并且功能齐全,但在部署到Weblogic 12c(12.0.1.2)时遇到了问题。在Weblogic上,在不引发任何错误的情况下,断言值将被还原为空无错误 问题似乎出在Xerces库中。据我所知,Spring SAML(由于OpenSAML)需要2.10.0版本,但Weblogic提供了Xerces库的2.8.0版本。我试图通过在Project WEB-INF/lib文件夹中包含正确的xercesImpl和xml API JAR来更新Xerces库版本。这修复了SpringSAML的decrpyting问题,但破坏了Weblogics解析JSP页面的能力。我在下面为未升级和升级的Xerces异常提供了部分堆栈跟踪。如果有人知道如何正确地解决这个问题,使Spring SAML能够在不破坏默认功能的情况下实现Weblogic的功能,我将不胜感激 这是更新Xerces之前的堆栈跟踪Java Weblogic 12c上的Spring SAML,java,spring-security,weblogic,opensaml,spring-saml,Java,Spring Security,Weblogic,Opensaml,Spring Saml,我目前正在开发一个应用程序,该应用程序使用springsaml()项目作为身份验证的一部分。我知道它仍然在RC中,但我们正在开发的应用程序也是如此。在部署到Tomcat7时,我们已经集成了该库,并且功能齐全,但在部署到Weblogic 12c(12.0.1.2)时遇到了问题。在Weblogic上,在不引发任何错误的情况下,断言值将被还原为空无错误 问题似乎出在Xerces库中。据我所知,Spring SAML(由于OpenSAML)需要2.10.0版本,但Weblogic提供了Xerces库的2
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)
2014-07-31 10:43:37675[[ACTIVE]ExecuteThread:'2'队列:'weblogic.kernel.Default(self-tuning)'DEBUG org.apache.xml.security.algorithms.JCEMapper-请求
RIhttp://www.w3.org/2001/04/xmlenc#aes256-cbc
2014-07-31 10:43:37675[[ACTIVE]ExecuteThread:'2'用于队列:'weblogic.kernel.Default(自调优)']DEBUG org.apache.xml.security.encryption.xmlchipher-JCE算法
=AES/CBC/ISO1016
对于war文件,您是否使用过首选web inf类
,对于ear文件,您是否使用过首选应用程序包
?其中一个可能会解决问题:
在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>
org.apache.xerces.xni.parser*
org.apache.xerces.parsers*
org.apache.xalan*
在weblogic.xml中:
<wls:container-descriptor>
<wls:prefer-web-inf-classes>true</prefer-web-inf-classes>
</wls:container-descriptor>
真的
以后遇到这些问题的人,请参见这些。我最终通过升级到xercesImpl 2.9.0版解决了这个问题。这似乎是解决这个问题的最佳版本,尽管它比OpenSAML要求的版本要低,但它修复了这个问题,同时没有引起Weblogic的任何其他问题(就我目前所遇到的情况而言)。Xerces 2.10.0需要更新版本的xml API才能正常工作,这导致Weblogic出现问题(2.9.0似乎与Weblogic中包含的xml API版本配合使用) 以下方法允许在Weblogic中绑定自定义Xerces和Xalan库:
创建ear存档spring-security-saml2-sample.ear
在ear中包含Spring SAML文件Spring-security-saml2-sample.war
,war应该包含自己版本的Xerces和Xalan
在ear中创建包含以下内容的文件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>
<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>
部署归档文件
我们的项目打包为war,我们使用第二个选项。它按预期加载较新的JAR,只是看起来它们与Weblogic默认xml解析器不兼容。也许我们还需要其他JAR?很有趣-您是否尝试过手动编译以查看是否存在问题?似乎仍然与weblogic有关,使用的版本与您的AppSimular不同,就我所知,它最终限制了可以更新的内容。很好,感谢您发布答案供其他人查找。感谢您的回答。这可能是最好的办法。
<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>