我知道处理服务身份验证/授权的方法不止一种,但我无法使其适用于静态文件。
是否有一种方法可以将行为配置为与服务相同;如果没有经过身份验证,对index.html的请求应该重定向到登录页面,就像对安全dto / service的请求一样。
我目前正在研究RawHttpHandlers,但由于它在管道中还为时过早,如何在apphost配置中获得身份验证设置?
提前谢谢 Gjergji答案 0 :(得分:1)
您必须使用IAppHost.RawHttpHandlers
,因为这是ServiceStack's Request Pipeline中唯一一个在访问内置静态文件处理之前执行的自定义处理程序。
但您仍然可以使用可用的扩展方法访问用户会话,例如:
this.RawHttpHandlers.Add(httpReq =>
{
var isStaticFileRequest = httpReq.PathInfo.StartsWith("/static");
if (isStaticFileRequest)
{
var session = httpReq.GetSession();
if (!session.HasRole("TheRole"))
return new ForbiddenHttpHandler();
}
return null;
});
此处理程序只检查它是否是对静态文件的请求,在这种情况下,路径信息以/static
开头,如果是,则检查用户会话是否具有所需角色,否则返回Forbidden请求,否则返回null
告诉ServiceStack继续执行请求。
注意:如果需要,您可以使用 HostContext.Resolve 访问ServiceStack外部的任何已注册的依赖项,例如:
var authRepo = HostContext.Resolve<IAuthRepository>();