如何在 NServiceBus 中实现访问控制处理程序

发布于 2024-10-05 03:56:44 字数 568 浏览 1 评论 0原文

只是想知道,是否有一种方法可以在 NServiceBus 中实现访问控制消息处理程序。通过“访问控制处理程序”,我的意思是一个处理程序应该始终在其他处理程序之前执行,并且应该控制(或者更确切地说,阻止有条件地执行其他处理程序)。

有人知道如何在 NServiceBus 中实现这个吗?

我已指定要在 EndPointConfig 中执行的处理程序的优先级,如下所示,

public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, ISpecifyMessageHandlerOrdering
{
    #region ISpecifyMessageHandlerOrdering Members

    public void SpecifyOrder(Order order)
    {
        order.Specify<First<AccessControlHandler>>();
    }

    #endregion
}

提前致谢,

Vijay。

Just wanted to know , if there is a way to implement an Access control Message handler in NServiceBus.By 'Access Control Handler' i mean One handler should always execute before other handlers and should control (or rather prevent conditionally the execution of the other handler).

Does someone know how to implement this in NServiceBus?

I have specified the Priority of the handlers to get executed in the EndPointConfig as this

public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, ISpecifyMessageHandlerOrdering
{
    #region ISpecifyMessageHandlerOrdering Members

    public void SpecifyOrder(Order order)
    {
        order.Specify<First<AccessControlHandler>>();
    }

    #endregion
}

Thanks in advance,

Vijay.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

Spring初心 2024-10-12 03:56:44

您可以通过如下方式创建 AccessControlHandler

 public class AccessControlHandler : IHandleMessages<IMessage>
{
    public IBus Bus { get; set; }

    public void Handle(IMessage message)
    {
        IDictionary<string, string> headers = Bus.CurrentMessageContext.Headers;
        string token;

        if (headers.TryGetValue("access_token", out token))
        {
            if (token == "MY_SECRET")
            {
                Console.WriteLine("User authenticated");
                return;
            }
        }

        Console.WriteLine("User not authenticated");
        Bus.DoNotContinueDispatchingCurrentMessageToHandlers();
    }

最后一行很重要,因为它告诉总线消息已成功,但不会将消息进一步传递到管道

You can by creating your AccessControlHandler like the following

 public class AccessControlHandler : IHandleMessages<IMessage>
{
    public IBus Bus { get; set; }

    public void Handle(IMessage message)
    {
        IDictionary<string, string> headers = Bus.CurrentMessageContext.Headers;
        string token;

        if (headers.TryGetValue("access_token", out token))
        {
            if (token == "MY_SECRET")
            {
                Console.WriteLine("User authenticated");
                return;
            }
        }

        Console.WriteLine("User not authenticated");
        Bus.DoNotContinueDispatchingCurrentMessageToHandlers();
    }

The last line is an important one as this tells the bus the message has succeeded but does not pass the message further down the pipeline

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文