我正在尝试将Spring Security SAML扩展与我的应用程序一起使用。我在找出正确的配置时遇到了麻烦。在我的应用程序中,我正在使用Spring Java Configuration。这是我的代码:
web.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.lang.ClassLoader.defineClass(ClassLoader.java:800)处的java.lang.ClassLoader.defineClass1(Native Method)实现类,位于java.security.SecureClassLoader.defineClass(SecureClassLoader) .java:142),位于weblogic.utils.classloaders.GenericClassLoader.java:412处,位于weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:366),位于weblogic.utils.classloaders.GenericClassLoader.findClass(位于weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:80)的GenericClassLoader.java:318),位于java.lang.ClassLoader.loadClass(ClassLoader.java)的java.lang.ClassLoader.loadClass(ClassLoader.java:425) :358),网址为weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:186)在org.springframework.security.saml.SAMLBootstrap.postProcessBeanFactory(SAMLBootstrap.java:42)在org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors的weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:50) (AbstractApplicationContext.java:696)在org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:686)在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461)在org.springframework。 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)位于org.springframework.web.context.ContextLoaderListener处的web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)weblogic.servlet.internal.EventsManager $ FireContextListenerAction.run(EventsManager.java:678)处的contextInitialized(ContextLoaderListener.java:112)at weblogic.security处的weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)位于weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)处的.service.SecurityManager.runAs(SecurityManager.java:120)位于weblogic处的weblogic.servlet.internal.EventsManager.executeContextListener(EventsManager.java:243)处的。在weblogic上的servlet.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:200)在weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:185)在weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1838) .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。在weblogic的weblogic.application.internal.flow.ModuleListenerInvoker.start(ExtensibleModuleWrapper.java:138)处,在weblogic.application.internal.flow.ModuleStateDriver $ 3.next(ModuleStateDriver.java:216)处,在weblogic.application.internal.flow.ModuleStateDriver $ 3.next(ModuleStateDriver.java:216)处weblogic上的application.internal.flow.ModuleStateDriver $ 3.next(ModuleStateDriver.java:211)。在weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:73)处的application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)在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。在weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:48)处的weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165)处的weblogic.deploy.internal.targetserver.AppContainerInvoker.activate的java:258) (AppContainerInvoker.java:80),位于weblogic.deploy.internal.targetserver.BasicDeployment。在weblogic.management.deploy.internal.DeploymentAdapter处$ 1.doActivate(DeploymentAdapter.java:51)在weblogic.deploy.internal.targetserver.Activate(BasicDeployment.java:226)在weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:418)在weblogic。在weblogic.management.deploy.internal.AppTransition $ 2.transitionApp(AppTransition.java:30)处的management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:200)在weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments) .java:240),位于weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:169),位于weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:123),位于weblogic.management.deploy。 weblogic上的internal.DeploymentServerService.resume(DeploymentServerService.java:210)。位于weblogic.server.AbstractServerService.postConstruct(AbstractServerService.java:78)上的management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:118)位于sun.reflect.GeneratedMethodAccessor7.invoke(未知源),位于sun.reflect.DelegatingMethodAccessorImpl。 org.jvnet上的java.lang.reflect.Method.invoke(Method.java:606)上的org.glassfish.hk2.utilities.reflection.ReflectionHelper.invoke(ReflectionHelper.java:1017)上的invoke(DelegatingMethodAccessorImpl.java:43) org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:430)上的.hk2.internal.ClazzCreator.postConstructMe(ClazzCreator.java:388)org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java) :456),位于org.glassfish.hk2.runlevel.RunLevelContext,位于org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:225)。org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2488)的org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98)的findOrCreate(RunLevelContext.java:82) org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:77)上的.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:606)org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java) :231),位于org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:254),位于org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:413),位于org.jvnet.hk2.internal。 org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:225)上的org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:82)上的SystemDescriptor.create(SystemDescriptor.java:456)在组织。位于org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98)的jvnet.hk2.internal.Utilities.createService(Utilities.java:2488)位于org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl。 java:87)位于org.glassfish.hk2.runlevel.internal.CurrentTaskFuture $ QueueRunner.oneJob(CurrentTaskFuture.java:1162)at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture $ QueueRunner.run(CurrentTaskFuture.java:1147)在weblogic.work.ExecuteThread.run(ExecuteThread.java:263)在weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)在weblogic.work.SelfTuningWorkManagerImpl $ WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:548)org.glassfish.hk2.runlevel.internal.CurrentTaskFuture $ QueueRunner.run(CurrentTaskFuture.org)上的org.glassfish.hk2.runlevel.internal.CurrentTaskFuture $ QueueRunner.oneJob(CurrentTaskFuture.java:1162)处的getService(ServiceHandleImpl.java:87)位于weblogic.work.SelfTuningWorkManagerImpl $ WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:548)处的weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)处的weblogic.work.ExecuteThread.run(ExecuteThread.java:263)的java:1147) )org.glassfish.hk2.runlevel.internal.CurrentTaskFuture $ QueueRunner.run(CurrentTaskFuture.org)的org.glassfish.hk2.runlevel.internal.CurrentTaskFuture $ QueueRunner.oneJob(CurrentTaskFuture.java:1162)处的getService(ServiceHandleImpl.java:87)位于weblogic.work.SelfTuningWorkManagerImpl $ WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:548)处的weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)处的weblogic.work.ExecuteThread.run(ExecuteThread.java:263)的java:1147) )311)在weblogic.work.ExecuteThread.run(ExecuteThread.java:263)311)在weblogic.work.ExecuteThread.run(ExecuteThread.java:263)
更多堆栈跟踪:
org.springframework.web.context.ContextLoader-上下文初始化失败java.lang.IncompatibleClassChangeError:在Java的java.lang.ClassLoader.defineClass(ClassLoader.java:800)的java.lang.ClassLoader.defineClass1(Native Method)实现类在weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:412)处的.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)在weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:366)处已截断。请参阅日志文件以获取完整的stacktrace
用户定义的侦听器org.springframework.web.context.ContextLoaderListener失败:java.lang.IncompatibleClassChangeError:实现类。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)at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:366)已截断。请参阅日志文件以获取完整的stacktrace
无法在web.xml中加载用户定义的过滤器:org.springframework.web.filter.DelegatingFilterProxy。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)at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:366)已截断。请参阅日志文件以获取完整的stacktrace
我究竟做错了什么?如果我在contextConfigLocation中添加,则会收到一条错误消息,指示DelegatingFilterProxy初始化失败。任何帮助将不胜感激。
谢谢!
为我解决了此问题的方法是添加wls:prefer-web-inf-classes元素并将其设置为true。在这里可以找到对此的很好的解释。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句