首页 文章

无法注册Camel Route的安全策略

提问于
浏览
1

我正在尝试将spring security role bead授权策略添加到基于Spring boot的apache camel web app以保护路由 .

我使用示例(http://camel.apache.org/spring-security-example.html)作为基础,而不是基于 spring 启动的基础 .

既然,我正在使用一个基于Spring Boot的apache camel应用程序,我坚持如何继续 .

我想知道如何通过代码添加bean / components以注册要在一个或多个camel路由中引用的授权策略 .

添加Spring Boot后,我不确定如何在Camel xml配置中保留某些组件,并在Java config / spring boot中添加其他所需的bean组件 .

所以,我无法将这个非Spring启动示例转换为基于apache camel spring boot的应用程序 .

有人可以帮助我找到解决问题的正确方法 .

我在java配置中定义如下 .

@Bean(name="roleUserEmp")
      public SpringSecurityAccessPolicy roleUserEmp() {
            SpringSecurityAccessPolicy policy = new SpringSecurityAccessPolicy("ROLE_USER_EMP");
            return policy;
       }

另外,我有如下的堆栈跟踪

org.apache.camel.spring.boot.CamelSpringBootInitializationException: org.apache.camel.FailedToCreateRouteException: Failed to create route createEmpFlow at: >>> Policy[ref:roleUserEmp] <<< in route: Route(createEmpFlow)[[From[direct:createEmpFlow]] -> [... because of No bean could be found in the registry for: roleUserEmp of type: org.apache.camel.spi.Policy
    at org.apache.camel.spring.boot.RoutesCollector.onApplicationEvent(RoutesCollector.java:94) ~[camel-spring-boot-2.16.2.jar:2.16.2]
    at org.apache.camel.spring.boot.RoutesCollector.onApplicationEvent(RoutesCollector.java:38) ~[camel-spring-boot-2.16.2.jar:2.16.2]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:163) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:136) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:380) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:334) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:854) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:140) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:540) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:347) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:295) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1112) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1101) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at com.company.application.EmpApplication.main(EmpApplication.java:48) [classes/:na]
Caused by: org.apache.camel.FailedToCreateRouteException: Failed to create route createEmpFlow at: >>> Policy[ref:roleUserEmp] <<< in route: Route(createEmpFlow)[[From[direct:createEmpFlow]] -> [... because of No bean could be found in the registry for: roleUserEmp of type: org.apache.camel.spi.Policy
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1072) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:196) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:947) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:3258) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:2981) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:175) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2812) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2808) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2831) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:2808) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2777) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.spring.boot.RoutesCollector.onApplicationEvent(RoutesCollector.java:92) ~[camel-spring-boot-2.16.2.jar:2.16.2]
    ... 15 common frames omitted
Caused by: org.apache.camel.NoSuchBeanException: No bean could be found in the registry for: roleUserEmp of type: org.apache.camel.spi.Policy
    at org.apache.camel.util.CamelContextHelper.mandatoryLookup(CamelContextHelper.java:159) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.model.TransactedDefinition.doResolvePolicy(TransactedDefinition.java:171) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.model.PolicyDefinition.resolvePolicy(PolicyDefinition.java:158) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.model.PolicyDefinition.createProcessor(PolicyDefinition.java:134) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.model.ProcessorDefinition.makeProcessorImpl(ProcessorDefinition.java:534) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:495) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:219) ~[camel-core-2.16.2.jar:2.16.2]
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1069) ~[camel-core-2.16.2.jar:2.16.2]
    ... 27 common frames omitted

谢谢,

我的路线如下,

<route id="createEmpFlow ">

    <from uri="direct:createEmpFlow "/>

        <policy ref="roleEmpUser">


        </policy>
</route>

我使用引用roleUserEmp的策略camel标记包装它 .

1 回答

  • 2

    SpringSecurityAccessPolicy 不是 Policy . 您应该使用 SpringSecurityAuthorizationPolicy ,并使用 accessDecisionManagerauthenticationManagerSpringSecurityAccessPolicy 进行配置 .

    @Bean(name="policy")
    public SpringSecurityAuthorizationPolicy springPolicy(AuthenticationManager authMgr, AccessDecisionManager accessMgr) {
        SpringSecurityAuthorizationPolicy policy = new SpringSecurityAuthorizationPolicy();
    
        // .. configure
        policy.setAuthenticationManager(authMgr);
        policy.setAccessDecisionManager(accessMgr);
        policy. setSpringSecurityAccessPolicy(new SpringSecurityAccessPolicy("ROLE_USER_EMP"));
        return policy;
    }
    

相关问题