Попытка интегрировать 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. Хорошее объяснение этому можно найти здесь.

Другие вопросы по тегам