Попытка интегрировать Struts2 и Spring Security SAML с приложением, используя конфигурацию Java
Я пытаюсь использовать расширение SAML Spring Security с моим приложением. У меня проблемы с определением правильной конфигурации. В моем приложении я использую 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;
}
}
Когда я запускаю приложение, я получаю следующую ошибку:
SEVERE: Сбой при инициализации контекста java.lang.IncompatibleClassChangeError: Реализация класса в java.lang.ClassLoader.defineClass1(собственный метод) в java.lang.ClassLoader.defineClass(ClassLoader.java:800) в java.security.oaderFileClass.SaderClass.java:142) по адресу weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:412) по адресу weblogic.utils.classloaders.GenericClassLoader.findLocalClass(универсальный класс-класс. GenericClassLoader.java:318) на weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:80) на java.lang.ClassLoader.loadClass(ClassLoader.java:425) на java.lang.load.ClassLoader (Class:358) по адресу weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:186) по адресу weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java.50.oolSlmSLF) rap.postProcessBeanFactory (SAMLBootstrap.java:42) по адресу org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:696) по адресу org.springfrax.pp.springframework.context.support.Abstra.java:306) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) в weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.secla):6767.gic 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) на веб-сайте (EventsManager.java:200) в weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:185) в weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.ebternal.Avlet.Wlet.Wlet.Wlet.Wlet.Wlet.Wlet.Wlet.Wlet.Wlet.Wlet.Wlet.Wlet.Wlet.Wlet.Wlet.WLT.WLT.Werg.W.W.W.W.W.W2:. начать (WebAppServletContext.java:2876) с веб-сайта $StartStateChange.next(ExtensibleModuleWrapper.java:360) в weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356) в weblogic.application.utils.StateMachineDriver.neS hineDriver.java:42) в weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138) в weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124) в веб-приложении..ModuleStateDriver$3.next(ModuleStateDriver.java:216) в weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:211) в weblogic.application.utils.StateMachineDriver.nextState(StateMachineD) 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. SingleModuleDeployment. Java:48) на weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165) на weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:80) на weblogic.depept.in.activate(BasicDeployment.java:226) на weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:418) на weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DepavaAdap)..management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:200) по адресу weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:30) по адресу weblogic.management.deploy.internal.ConfiguredDeployments.transition. ConfiguredDeployments.java:240) в weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:169) в weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:12) по адресу weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:210) по адресу weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:118) по адресу weblogic.server.erviceServiceServiceServiceSpost. Java:78) в sun.reflect.GeneratedMethodAccessor7.invoke(Неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke60 (at) метод (at)..glassfish.hk2.utilities.reflection.ReflectionHelper.invoke(ReflectionHelper.java:1017) в org.jvnet.hk2.internal.ClazzCreator.postConstructMe(ClazzCreator.java:388) в org.jvnet.hk2.internal.claCateClaCate(ClazzCreator.java:430) по адресу org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:456) по адресу org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLave): AsyncRunLevel glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:82) в org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2488) в org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98) в org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:606) в org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:77) в org.jvnet.hk2.internal.ClazzCreator.resolve(atg).jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:254) в org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:413) в org.jvnet.hk2.internal.orset, hk2.internal.Utilities.createService (Utilities.java:2488) в org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98) в org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87) в org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.oneJob(CurrentTaskFuture.java:1162) в org.glassfish.hk2.runlevel.inuek.rent CurrentTaskFuture.java:1147) в weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:548) в weblogic.work.ExecuteThread.execute(ExecuteThread.java:311r) в веб-исполнении:263)
Больше трассировки стека:
org.springframework.web.context.ContextLoader - Сбой при инициализации контекста java.lang.IncompatibleClassChangeError: Реализация класса в java.lang.ClassLoader.defineClass1(собственный метод) в java.lang.ClassLoader.defineClass) java класса.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) на веб-сайте смотрите файл журнала для полной трассировки стека
Определенный пользователем слушатель org.springframework.web.context.ContextLoaderListener не удалось: java.lang.IncompatibleClassChangeError: Реализующий класс. java.lang.IncompatibleClassChangeError: Реализация класса в java.lang.ClassLoader.defineClass1(собственный метод) в java.lang.ClassLoader.defineClass(ClassLoader.java:800) в java.security.SecureClassLoader.jjf на 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.lang.ClassLoader.defineClass1(собственный метод) в java.lang.ClassLoader.defineClass(ClassLoader.java:800) в java.security.SecureClassLoader.jjf на weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:412) на weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:366) усечен. смотрите файл журнала для полной трассировки стека
Что я делаю неправильно? Если я добавляю в contextConfigLocation, я получаю сообщение об ошибке, указывающее, что DelegatingFilterProxy не удалось инициализировать. Любая помощь будет принята с благодарностью.
Спасибо!
1 ответ
Что решило эту проблему для меня, так это добавив элемент wls: предпочитаемый-web-inf-classes и установив для него значение true. Хорошее объяснение этому можно найти здесь.