激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - Asp.Net二級域名共享Forms身份驗證、下載站/圖片站的授權訪問控制

Asp.Net二級域名共享Forms身份驗證、下載站/圖片站的授權訪問控制

2019-09-28 12:04asp.net技術網 ASP.NET教程

我們平時一般在做圖片或者文件下載權限控制的時候基本都是控制到下載頁面的,當你的下載地址暴露后,瀏覽者就直接可以通過文件地址進行下載了,這時候也就出現了我們常說的盜鏈

一般大家對小文件的解決辦法是直接在服務端讀取文件,然后輸出,這樣就避免了文件地址的暴露,這是一種解決辦法。而我現在想說的是使用 TransmitFile 方法直接輸出文件,但是這個方法對大文件的支撐力度有多少,以及會帶來多大的性能開銷,我還沒有測試過,有興趣的朋友可以測試下,并發表評論。 

好了,進入正題,一般對下載站,大家想到的就是流量的問題,所以自動就想到應該把文件與程序代碼分開部署。所以我給文件單獨做了一個二級域名,我們就叫 file.xxx.com 吧。主網站域名就是 www.xxx.com了,或者其他二級域名都行。 

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

復制代碼代碼如下:


<?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> 
<!--此節點只需加到文件站下--> <system.webServer> 
<handlers> 
<add name="*.*" path="*.*" verb="*" type="Web.Handler.Download" /> 
</handlers> 
</system.webServer> 
</configuration> 


以上配置文件針對跨域訪問的幾個關鍵配置點:一:authentication的name要相同,path="/" 表示cookie存儲路徑為根域名,enableCrossAppRedirects="true" 表示身份驗證是否可以重定向到其他應用程序。二:httpCookie節點配置為頂級域名。三:兩個站點的machinekey必須相同。 那針對權限控制,通過實現.Net里面的訪問過濾器,也就是IHttpHandler接口,用來攔截訪問。實現方法也很簡單,只要實現ProcessRequest方法就可以了,下面是我的代碼: 

復制代碼代碼如下:


namespace Web.Handler 

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




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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人毛片免费看 | 91精品国产综合久久婷婷香蕉 | 免费在线观看国产精品 | 日韩在线激情 | 久久久久亚洲a | 国产91在线高潮白浆在线观看 | 日本视频网 | 精品国产91久久久久久浪潮蜜月 | 免费国产在线视频 | 毛片免费看电影 | 99ri在线| 欧美性受xxxxxx黑人xyx性爽 | 成人免费一区二区三区在线观看 | 四虎久草 | 综合欧美一区二区三区 | 国产精品99久久久久久宅女 | 美国人成人在线视频 | 永久在线观看电影 | 久久成人免费观看 | 国产黄色录像片 | 激情毛片 | avlululu | 久久久噜噜噜久久熟有声小说 | 免费视频91 | 国产成视频在线观看 | 曰批全过程40分钟免费视频多人 | 久久久久国| 免费视频一区 | 亚洲成人黄色片 | 黄a大片| 国产精品午夜未成人免费观看 | 色黄网站在线观看 | 99riav国产在线观看 | 日产精品一区二区三区在线观看 | 国产精品看片 | 一级国产免费 | 一区二区三区四区视频在线观看 | 女人久久久www免费人成看片 | www.99xxxx.com| 激情97 | 日本一级黄色大片 |