栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > asp

Asp.Net二级域名共享Forms身份验证、下载站/图片站的授权访问控制

asp 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Asp.Net二级域名共享Forms身份验证、下载站/图片站的授权访问控制

一般大家对小文件的解决办法是直接在服务端读取文件,然后输出,这样就避免了文件地址的暴露,这是一种解决办法。而我现在想说的是使用 TransmitFile 方法直接输出文件,但是这个方法对大文件的支撑力度有多少,以及会带来多大的性能开销,我还没有测试过,有兴趣的朋友可以测试下,并发表评论。

好了,进入正题,一般对下载站,大家想到的就是流量的问题,所以自动就想到应该把文件与程序代码分开部署。所以我给文件单独做了一个二级域名,我们就叫 file.xxx.com 吧。主网站域名就是 www.xxx.com了,或者其他二级域名都行。

那第一步就是先要实现这2个站点之间的身份验证共享了,比如登陆了主站后自动分站就实现登录了,那.Net的Forms身份验证很容易的就能实现这个功能,底层思路其实就是共享cookie的原理。第二部就是给文件站做权限过滤。下面我们给主站以及文件站同时添加web.config。给他们加入相同的配置,Web.config主要配置代码如下:
复制代码 代码如下:



















以上配置文件针对跨域访问的几个关键配置点:一:authentication的name要相同,path="/" 表示cookie存储路径为根域名,enableCrossAppRedirects="true" 表示身份验证是否可以重定向到其他应用程序。二:httpcookie节点配置为顶级域名。三:两个站点的machinekey必须相同。 那针对权限控制,通过实现.Net里面的访问过滤器,也就是IHttpHandler接口,用来拦截访问。实现方法也很简单,只要实现ProcessRequest方法就可以了,下面是我的代码:
复制代码 代码如下:
namespace Web.Handler
{
///
/// 文件下载登陆验证
///

public class Download : IHttpHandler
{
public bool IsReusable
{
get
{
return true;
}
}

public void ProcessRequest(HttpContext context)
{
if (context.User.Identity.IsAuthenticated)
{
string fileName = context.Server.MapPath(context.Request.FilePath);
context.Response.ContentType = Path.GetExtension(fileName);
context.Response.TransmitFile(context.Request.FilePath);
}
else
{
context.Response.Write("您未登录!");
}
}
}
}

写完以上代码后,那就是增加过滤配置了,注意上面的配置文件注释,最主要的配置节: name是筛选器的名称,随便填,path表示你要过滤的文件后缀,我是所有文件都需要过滤,所以直接用*.*,如果单纯只过滤jpg跟gif,可以改为:*.jpg,*.gif 即可,type表示过滤器Dll地址,也就是我们实现IHttpHandler的类全名,ok,文件访问控制就已经完成了。 注意:由于我使用的是IIS7,所以此处的Handler添加到了system.webSever节点下,IIS6及以下版本直接添加到system.web节点下就可以了。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/58402.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号