Spring集成安全性与REST服务示例

时间:2016-04-04 10:25:46

标签: spring-security spring-integration spring-security-oauth2

我正在实现Spring Integration for REST服务。我正在关注XPadro的githib示例 - https://github.com/xpadro/spring-integration

我创建了简单的读取,写入和更新操作。 从int-http-dsl项目中获取的示例。

我想用oath2实现spring-security。我正在参考http://docs.spring.io/spring-integration/reference/html/security.html

我无法将两者连接在一起。因为以下是他们映射请求的方式

@Bean
    public IntegrationFlow httpGetFlow() {
        return IntegrationFlows.from(httpGetGate()).channel("httpGetChannel").handle("personEndpoint", "get").get();
    }
@Bean
    public MessagingGatewaySupport httpGetGate() {
        HttpRequestHandlingMessagingGateway handler = new HttpRequestHandlingMessagingGateway();
        handler.setRequestMapping(createMapping(new HttpMethod[]{HttpMethod.GET}, "/persons/{personId}"));
        handler.setPayloadExpression(parser().parseExpression("#pathVariables.personId"));
        handler.setHeaderMapper(headerMapper());

        return handler;
    }

以下是我们如何整合安全性

@Bean
    @SecuredChannel(interceptor = "channelSecurityInterceptor", sendAccess = "ROLE_ADMIN")
    public SubscribableChannel adminChannel() {
        return new DirectChannel();
    }

我无法在第一个例子中找到创建频道的方法,所以如何整合它。

我是正确的方向还是错了?

有没有更好的教程来处理Spring-integration(http)与spring-security(使用oauth)?

1 个答案:

答案 0 :(得分:1)

Spring Integration Java DSL允许将外部@Bean用于流定义中的消息通道。因此,您的httpGetChannel可以声明并使用,如:

@Bean
@SecuredChannel(interceptor = "channelSecurityInterceptor", sendAccess = "ROLE_ADMIN")
public SubscribableChannel httpGetChannel() {
    return new DirectChannel();
}

@Bean
public IntegrationFlow httpGetFlow() {
    return IntegrationFlows.from(httpGetGate())
                  .channel(httpGetChannel())
                  .handle("personEndpoint", "get")
                  .get();
}

随意提出一个GitHub问题,在框架中直接从DSL的.channel()定义中提出更明显的问题:https://github.com/spring-projects/spring-integration-java-dsl/issues