部署apache-camel spring-security-example

时间:2016-09-30 05:17:47

标签: spring-security apache-camel

我正在尝试部署apache-camel spring-security-example https://github.com/apache/camel/tree/master/examples/camel-example-spring-security

我遵循的步骤。

  1. 已下载apache-camel-2.17.3发布。
  2. 运行mvn clean install
  3. mvn jetty:run
  4. 然后引发了以下异常。

      

    2016-09-30 10:07:37,517 [main] ERROR ContextLoader
       - 上下文初始化失败org.springframework.beans.factory.BeanCreationException:错误   创建名为' accessDecisionManager'的bean在类路径中定义   resource [camel-context.xml]:bean的实例化失败;嵌套   异常是org.springframework.beans.BeanInstantiationException:   无法实例化   [org.springframework.security.access.vote.AffirmativeBased]:不   找到默认构造函数;嵌套异常是   java.lang.NoSuchMethodException:   org.springframework.security.access.vote.AffirmativeBased。()at   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)     在   org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)     在   org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)     在   org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)     在   org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)     在   org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)     在   org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)     在   org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)     在   org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)     在   org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)     在   org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)     在   org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:782)     在   org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:424)     在   org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:774)     在   org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:249)     在   org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242)     在   org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)     在   org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)     在   org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:298)     在   org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)     在   org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229)     在   org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:172)     在   org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)     在   org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229)     在   org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)     在   org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)     在org.eclipse.jetty.server.Server.doStart(Server.java:282)at   org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65)at at   org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)     在   org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:520)     在   org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:365)     在   org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:523)     在   org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:133)     在   org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)     在   org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)     在   org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)     在   org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:108)     在   org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:76)     在   org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)     在   org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:116)     在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:361)at at   org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155)at   org.apache.maven.cli.MavenCli.execute(mavenCli.java:584)at at   org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)at at   org.apache.maven.cli.MavenCli.main(MavenCli.java:157)at at   sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:497)at   org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)     在   org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)     在   org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)     在   org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)   引起:org.springframework.beans.BeanInstantiationException:   无法实例化   [org.springframework.security.access.vote.AffirmativeBased]:不   找到默认构造函数;嵌套异常是   java.lang.NoSuchMethodException:   org.springframework.security.access.vote.AffirmativeBased。()at   org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:85)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098)     ......还有55个

    请有人告诉我原因。

1 个答案:

答案 0 :(得分:0)

尽管它很旧,但我也不得不四处寻找解决2.17.x上的camel-eaxmple-spring-security示例的解决方案(我猜想是Others)。我想同时使用HTTP GET和POST进行BASIC身份验证。我不认为这是一个错误,只是Spring Security版本可能有所更改,因此自从首次创建2.17.x示例以来就没有对其进行更新。

为了使示例生效,已经对示例进行了一些更改。这是我所做的更改的列表,仅是一处; 1)更改

 <spring-security:intercept-url pattern="/camel/**" access="ROLE_User"/> to
 <spring-security:intercept-url pattern="/camel/**" access="hasRole ('ROLE_User')"/> 

(不记得我在哪里找到的链接) 2)将访问决策管理器bean更改为包括构造函数,链接http://stackoverflow.com/questions/29495283/no-default-constructor-found-nested-exception-is-java-lang-nosuchmethodexceptio也会处理此问题,我的更改也是如此

    <bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
        <constructor-arg>
            <bean class="org.springframework.security.access.vote.RoleVoter"/>
       </constructor-arg>
       <property name="allowIfAllAbstainDecisions" value="true"/>
   </bean>

这些更改使该示例可以按预期的方式进行HTTP GET请求的工作,但是我也希望HTTP POST请求能够工作,但是“原样”我仍然遇到403错误-这些错误可能是来自其他服务器到我的服务器-而不是一个Web客户端-虽然我不建议禁用csrf,但我认为这是可以接受的。为了禁用csrf,我添加了     <spring-security:csrf disabled="true"/><spring-security:http>设置

要进行HTTP POST调用,您需要添加带有Base64编码凭据的Authorization标头

<!-- for bob and bobspassword -->
<setHeader headername="Authorization">
    <constant>Basic amlt0mppbXNwYXNzd29yZA==</constant>
</setHeader>

您还必须检查要发送的正文的Content-Type设置是否正确,例如application / json ...