`
t225com
  • 浏览: 655855 次
文章分类
社区版块
存档分类
最新评论

WCF4.0 —— Routing Service 自定义Filter控制访问权限

 
阅读更多
接着上一篇的实例,我们通过Routing Service使用了 filterType="EndpointName" 来转发客户端的请求,映射到内部多个服务上。
但问题又来了,比如有2个内部服务A,B。有N个客户端,并不是所有的客户端同时都有对A,B的访问权限,
有些客户端可以访问A,有些客户端可以访问B,如何控制客户端请求的权限呢?了解WCF认证机制的童鞋们大多数会想到通过服务A,B
自身的认证功能去屏蔽非法的访问,甚至更优秀的实践是抽出共通的消息拦截,将A,B的认证统一处理。本篇文章则要在 RoutingService 的 Filter 上做做功夫。

我们要实现的功能,如下图所示:

即 User A 只能访问 Service1, User B 只能访问 Service2。这里要利用自定义 Filter 实现对用户名的检查,自定义Filter需要继承 MessageFilter
形如:

这里需要注意的是,RoutingService 中配置了多个 Endpoint,直接返回 true, false 的判断显然不行,还需要修改客户端请求映射到内部的 Endpoint 上。
因此通过直接继承 EndpointNameMessageFilter 来实现最简单~
* 该示例中使用 Windows 集成认证,需要在服务端Windows上建立两个账号:Foo 和 Bar。
如果请求的Action是Service1 则只有 Foo 可以使用,Service2 只有 Bar 可以使用。
修改Routing Service的配置文件中 routing/filters/filter 里的内容:
将 filterType 改为 Custom, customType 指向上面的实现类。整体如下图:

客户端调用:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics