一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - ASP.NET教程 - Asp.Net二級(jí)域名共享Forms身份驗(yàn)證、下載站/圖片站的授權(quán)訪問(wèn)控制

Asp.Net二級(jí)域名共享Forms身份驗(yàn)證、下載站/圖片站的授權(quán)訪問(wèn)控制

2019-09-28 12:04asp.net技術(shù)網(wǎng) ASP.NET教程

我們平時(shí)一般在做圖片或者文件下載權(quán)限控制的時(shí)候基本都是控制到下載頁(yè)面的,當(dāng)你的下載地址暴露后,瀏覽者就直接可以通過(guò)文件地址進(jìn)行下載了,這時(shí)候也就出現(xiàn)了我們常說(shuō)的盜鏈

一般大家對(duì)小文件的解決辦法是直接在服務(wù)端讀取文件,然后輸出,這樣就避免了文件地址的暴露,這是一種解決辦法。而我現(xiàn)在想說(shuō)的是使用 TransmitFile 方法直接輸出文件,但是這個(gè)方法對(duì)大文件的支撐力度有多少,以及會(huì)帶來(lái)多大的性能開(kāi)銷,我還沒(méi)有測(cè)試過(guò),有興趣的朋友可以測(cè)試下,并發(fā)表評(píng)論。 

好了,進(jìn)入正題,一般對(duì)下載站,大家想到的就是流量的問(wèn)題,所以自動(dòng)就想到應(yīng)該把文件與程序代碼分開(kāi)部署。所以我給文件單獨(dú)做了一個(gè)二級(jí)域名,我們就叫 file.xxx.com 吧。主網(wǎng)站域名就是 www.xxx.com了,或者其他二級(jí)域名都行。 

那第一步就是先要實(shí)現(xiàn)這2個(gè)站點(diǎn)之間的身份驗(yàn)證共享了,比如登陸了主站后自動(dòng)分站就實(shí)現(xiàn)登錄了,那.Net的Forms身份驗(yàn)證很容易的就能實(shí)現(xiàn)這個(gè)功能,底層思路其實(shí)就是共享Cookie的原理。第二部就是給文件站做權(quán)限過(guò)濾。下面我們給主站以及文件站同時(shí)添加web.config。給他們加入相同的配置,Web.config主要配置代碼如下: 

復(fù)制代碼代碼如下:


<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<connectionStrings> 
</connectionStrings> 
<appSettings> 
</appSettings> 
<system.web> 
<authentication mode="Forms"> 
<forms loginUrl="~/Home/LogOn" defaultUrl="/" timeout="600" slidingExpiration="true" name="File" path="/" enableCrossAppRedirects="true"></forms> 
</authentication> <httpCookies domain=".xxx.com"/> 
<machineKey validationKey="AAA977D304FB289C182E00C710A099C9F92986DC25AD69F8" decryptionKey="AAA2B3F76A9359431E717CA8275EE72EEEDC70ED55152010" validation="SHA1"/> 
</system.web> 
<!--此節(jié)點(diǎn)只需加到文件站下--> <system.webServer> 
<handlers> 
<add name="*.*" path="*.*" verb="*" type="Web.Handler.Download" /> 
</handlers> 
</system.webServer> 
</configuration> 


以上配置文件針對(duì)跨域訪問(wèn)的幾個(gè)關(guān)鍵配置點(diǎn):一:authentication的name要相同,path="/" 表示cookie存儲(chǔ)路徑為根域名,enableCrossAppRedirects="true" 表示身份驗(yàn)證是否可以重定向到其他應(yīng)用程序。二:httpCookie節(jié)點(diǎn)配置為頂級(jí)域名。三:兩個(gè)站點(diǎn)的machinekey必須相同。 那針對(duì)權(quán)限控制,通過(guò)實(shí)現(xiàn).Net里面的訪問(wèn)過(guò)濾器,也就是IHttpHandler接口,用來(lái)攔截訪問(wèn)。實(shí)現(xiàn)方法也很簡(jiǎn)單,只要實(shí)現(xiàn)ProcessRequest方法就可以了,下面是我的代碼: 

復(fù)制代碼代碼如下:


namespace Web.Handler 

/// <summary> 
/// 文件下載登陸驗(yàn)證 
/// </summary> 
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("您未登錄!"); 




寫完以上代碼后,那就是增加過(guò)濾配置了,注意上面的配置文件注釋,最主要的配置節(jié):<add name="*.*" path="*.*" verb="*" type="Web.Handler.Download" /> name是篩選器的名稱,隨便填,path表示你要過(guò)濾的文件后綴,我是所有文件都需要過(guò)濾,所以直接用*.*,如果單純只過(guò)濾jpg跟gif,可以改為:*.jpg,*.gif 即可,type表示過(guò)濾器Dll地址,也就是我們實(shí)現(xiàn)IHttpHandler的類全名,ok,文件訪問(wèn)控制就已經(jīng)完成了。 注意:由于我使用的是IIS7,所以此處的Handler添加到了system.webSever節(jié)點(diǎn)下,IIS6及以下版本直接添加到system.web節(jié)點(diǎn)下就可以了。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲免费国产 | 天天做天天爰夜夜爽 | 青青青视频蜜桃一区二区 | 日韩成人av在线 | 精选国产AV精选一区二区三区 | 蘑菇香蕉茄子绿巨人丝瓜草莓 | 国产日韩欧美在线一二三四 | 久久青青草原精品国产软件 | hd性欧美俱乐部中文 | 国产福利专区精品视频 | 欧美日韩精品一区二区三区视频 | 国产午夜免费 | 火影忍者羞羞 | 婷婷福利 | 久久精品国产亚洲AV麻豆欧美玲 | 久久精品一区 | 99久女女精品视频在线观看 | 精品视频中文字幕 | 精品视频在线免费播放 | 性生大片免费看 | 男人使劲躁女人视频免费 | 99久久国产综合精麻豆 | 国产成人综合亚洲一区 | 深夜在线网站 | xnxx18美女| 无人区国产大片 | 日韩欧美一区二区三区免费看 | 太深了 太粗h1v1 | 色狠狠成人综合网 | 无套白浆 | 亚洲 欧美 偷自乱 图片 | 丝袜老师好湿好紧我要进去了 | 国产精品麻豆99久久 | 草逼视频免费看 | 高人先生免费观看全集 | 贵妇的私人性俱乐部 | 日本黄a三级三级三级 | 亚洲天堂免费看 | 成人高清视频在线观看 | 国产高清在线精品一区二区 | 午夜A级理论片左线播放 |