我正在尝试在我的应用程序中使用 Spring Security SAML Extension。我无法确定正确的配置。在我的应用程序中,我使用的是 Spring Java 配置。这是我的代码:
网页.xml:
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.ceiwc.es.config</param-value>
</context-param>
<!-- For Spring Security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<!-- Handles Strut2 URL requests -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- Mapping for Spring Security URLs -->
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Mapping for Struts2 URLs -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- /WEB-INF/spring/spring-config.xml -->
<!-- <context-param> <param-name>contextConfigLocation</param-name> <param-value>
/WEB-INF/spring/springSecurity-config.xml </param-value> </context-param> -->
<!-- In charge of starting and stopping the Spring root ApplicationContext.
It also determines which configurations are to be used, by looking at the
contextConfigLocation. -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<session-config>
<session-timeout>20</session-timeout>
</session-config>
这是我的配置类:
@Configuration
@ComponentScan(basePackages = {"com.ceiwc.bc", "com.ceiwc.es"})
@Import({DataConfig.class, LdapConfig.class, CacheConfig.class})
@ImportResource({"/WEB-INF/spring/spring-config.xml", "/WEB-INF/spring/springSecurity-config.xml"})
@PropertySource({"classpath:global.properties"})
public class ApplicationConfig {
@Bean
public JavaMailSender mailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("iwmail.iwif-internal.com");
return mailSender;
}
}
当我运行应用程序时,我收到以下错误:
严重:上下文初始化失败 java.lang.IncompatibleClassChangeError:在 java.security.SecureClassLoader.defineClass(SecureClassLoader) 的 java.lang.ClassLoader.defineClass(ClassLoader.java:800) 的 java.lang.ClassLoader.defineClass1(Native Method) 实现类.java:142) 在 weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:412) 在 weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:366) 在 weblogic.utils.classloaders.GenericClassLoader.findClass( GenericClassLoader.java:318) 在 weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:80) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:425) 在 java.lang.ClassLoader.loadClass(ClassLoader.java :358) 在 weblogic.utils.classloaders。GenericClassLoader.loadClass(GenericClassLoader.java:186) 在 weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:50) 在 org.springframework.security.saml.SAMLBootstrap.postProcessBeanFactory(SAMLBootstrap.java:42) 在 org.springframework .context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:696) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:686) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java :461) 在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410) 在 org.springframework.web.context.ContextLoader。initWebApplicationContext(ContextLoader.java:306) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 在 weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:678) 在 weblogic.security .acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 在 weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 在 weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 在weblogic.servlet.internal.EventsManager.executeContextListener(EventsManager.java:243) 在 weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:200) 在 weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:185)在 weblogic.servlet.internal。WebAppServletContext.preloadResources(WebAppServletContext.java:1838) 在 weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2876) 在 weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1661) 在 weblogic.servlet.internal .WebAppModule.start(WebAppModule.java:823) 在 weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360) 在 weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356) 在weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42) 在 weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138) 在 weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124) 在 weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:216) 在 weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:211) 在 weblogic.application.utils.StateMachineDriver .nextState(StateMachineDriver.java:42) 在 weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:73) 在 weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:24) 在 weblogic。 application.internal.BaseDeployment$2.next(BaseDeployment.java:729) 在 weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42) 在 weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:258) 在weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:48) 在 weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:80) 在 weblogic.deploy.internal.targetserver.BasicDeployment.activate 的 weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165) (BasicDeployment.java:226) 在 weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:418) 在 weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:51) 在 weblogic.management .deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:200) 在 weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:30) 在 weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments.爪哇:240) 在 weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:169) 在 weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:123) 在 weblogic.management.deploy.internal.DeploymentServerService .resume(DeploymentServerService.java:210) 在 weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:118) 在 weblogic.server.AbstractServerService.postConstruct(AbstractServerService.java:78) 在 sun.reflect.GeneratedMethodAccessor7。在 org.glassfish.hk2.utilities.reflection.ReflectionHelper 的 java.lang.reflect.Method.invoke(Method.java:606) 的 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 调用(未知来源)。在组织调用(ReflectionHelper.java:1017)。jvnet.hk2.internal.ClazzCreator.postConstructMe(ClazzCreator.java:388) at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:430) at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor. java:456) 在 org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:225) 在 org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:82) 在 org.jvnet.hk2 .internal.Utilities.createService(Utilities.java:2488) at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98) at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:606 ) 在 org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:231) 在 org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:77) 在 org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:254) at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:413) at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor. java:456) 在 org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:225) 在 org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:82) 在 org.jvnet.hk2 .internal.Utilities.createService(Utilities.java:2488) at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98) at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87 ) 在 org.glassfish.hk2.runlevel.internal 的 org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.oneJob(CurrentTaskFuture.java:1162)。CurrentTaskFuture$QueueRunner.run(CurrentTaskFuture.java:1147) 在 weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:548) 在 weblogic.work.ExecuteThread.execute(ExecuteThread.java:311) 在 weblogic.work.ExecuteThread .run(ExecuteThread.java:263)
更多堆栈跟踪:
org.springframework.web.context.ContextLoader - 上下文初始化失败 java.lang.IncompatibleClassChangeError: 在 java.lang.ClassLoader.defineClass(ClassLoader.java:800) 在 java.lang.ClassLoader.defineClass1(Native Method) 在 java 实现类.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 在 weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:412) 在 weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:366) 被截断。查看日志文件以获取完整的堆栈跟踪
用户定义的监听器 org.springframework.web.context.ContextLoaderListener 失败:java.lang.IncompatibleClassChangeError:实现类。java.lang.IncompatibleClassChangeError:在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 的 java.lang.ClassLoader.defineClass(ClassLoader.java:800) 的 java.lang.ClassLoader.defineClass1(Native Method) 实现类在 weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:412) 在 weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:366) 被截断。查看日志文件以获取完整的堆栈跟踪
无法在 web.xml 中加载用户定义的过滤器:org.springframework.web.filter.DelegatingFilterProxy。java.lang.IncompatibleClassChangeError:在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 的 java.lang.ClassLoader.defineClass(ClassLoader.java:800) 的 java.lang.ClassLoader.defineClass1(Native Method) 实现类在 weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:412) 在 weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:366) 被截断。查看日志文件以获取完整的堆栈跟踪
我究竟做错了什么?如果我在 contextConfigLocation 中添加,我会收到一个错误,表明 DelegatingFilterProxy 无法初始化。任何帮助将不胜感激。
谢谢!