我有迷你探查器正在工作,但现在我试图通过设置{Profileer Security >>中描述的功能来限制访问http://miniprofiler.com/
MiniProfiler.Settings.Results_Authorize = IsUserAllowedToSeeMiniProfilerUI;
MiniProfiler.Settings.Results_List_Authorize = IsUserAllowedToSeeMiniProfilerUI;
我的IsUserAllowedToSeeMiniProfilerUI
函数需要查看ClaimsPrincipal的结果,该结果由自定义全局注册的授权过滤器修改。
当我观看呼叫时,主要请求按预期授权,IsUserAllowedToSeeMiniProfilerUI
返回true。但是,检索探查器结果(~/mini-profiler-resources/results
或~/mini-profiler-resources/results-index
)的http请求会绕过我的全局授权过滤器,因此未针对该请求正确修改ClaimsPrincipal,并且IsUserAllowedToSeeMiniProfilerUI
错误地返回{ {1}}由于这个原因。
我将mini-profiler的过滤器注册为false
,并且还将web.config中的处理程序注册为
GlobalFilters.Filters.Add(new ProfilingActionFilter())
我的自定义授权过滤器已在Global.asax中注册,方法是将其添加为<system.webServer>
<handlers>
<add name="MiniProfiler" path="mini-profiler-resources/*" verb="*"
type="System.Web.Routing.UrlRoutingModule"
resourceType="Unspecified" preCondition="integratedMode" />
<!-- ... -->
</handlers>
为什么迷你探查器会绕过我的授权过滤器?
答案 0 :(得分:0)
GlobalFilters
以MVC框架为中心。因此,默认情况下,全局注册的授权过滤器仅对mvc框架处理的请求生效 - 不适用于所有http请求。
MiniProfiler在单个类MiniProfilerHandler
中实现其客户端结果,该类实现IRouteHandler
和IHttpHandler
。 (默认的探查器提供程序WebRequestProfilerProvider
可确保注册MiniProfilerHandler
的路由.UrlRoutingModule的web.config注册可确保实际路由迷你探查器URL。)
因此,迷你探查器直接处理探查器结果http请求作为通过路由定位的http处理程序 - 在正常的MVC请求流之外。
因此有必要处理例如自定义授权逻辑。考虑到任何授权过滤器(或其他操作过滤器)都不能保证已运行的IsUserAllowedToSeeMiniProfilerUI
方法。但请注意,一旦启动了分析,似乎也会在某个阶段调用Results_Authorize
,因此您还必须处理过滤器已运行的情况。