尝试使用Java配置将Struts2和Spring Security SAML与应用程序集成

NuAlphaMan

我正在尝试将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初始化失败。任何帮助将不胜感激。

谢谢!

NuAlphaMan

为我解决了此问题的方法是添加wls:prefer-web-inf-classes元素并将其设置为true。这里可以找到对此的很好的解释

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Spring Boot应用程序中禁用Spring Security

Spring Security SAML实施

Struts2 + Spring Security 2.06:尝试在Action方法上使用@Secured时,Valuestack为null

Spring Security和CAS集成

如何在Grails应用程序和Java应用程序之间共享Spring Security类?

使用Spring Security保护应用程序无效

在Spring Boot应用程序中为多个登录页面配置Spring Security

可以在应用程序中实现SAML和基本Spring Security吗?

Spring Security SAML断言到期且应用程序会话到期

Spring Security XML配置和Java配置中的Spring SAML

在Web应用程序中使用Spring Security实现Oauth2

我可以将SAML应用程序与Azure AD B2C集成吗?

无法使用Spring Security 5登录到应用程序

如何使用Spring Security在Spring Boot应用程序中配置RSocket安全

启用Spring Security后无法在本地启动应用程序

Spring Security授权来自本地Postman应用程序的请求

Spring集成应用程序和缓存

将Apache Jersey for REST Web服务与struts2 Web应用程序集成

在Spring Security应用程序中将属性传递给视图

如何使用Spring Security配置我的应用程序?

在没有SAML的情况下如何在多个Spring Security Web应用程序上使用SSO?

使用Spring Security配置应用程序以接受HTTP请求并发送HTTPS响应

一个应用程序中的Spring Security OAuth2和FormLogin

如何使用spring-security-saml使Global Logout在多租户SAML应用程序中工作?

具有标准Java应用程序的Spring Security SAML

是否有使用 Spring Security 将远程 SSO 集成到 Web 应用程序的示例?

将 SSRS 与 Web 应用程序集成

将 Admob 与 ios 应用程序集成

Spring Batch 与 Web 应用程序的集成