IIS7.5での静的コンテンツへのアクセス制御方法
タイトルについてですが、
求められていることは次の通りとなっております。
1.ドメイン以下に静的コンテンツのパスを指定してアクセスできる。
2.ログインしていない場合には準備されている動的コンテンツのログインページに遷移する(Login.aspxなど)。
3.各ファイル毎にユーザごとのアクセス権限が設定されている(ユーザと権限のマップはDB)
4.ログイン状態はセッションで維持
これについて次の様に実現しようとしました。
1.Web.configにてハンドラの設定
2.ハンドラでログイン状態、アクセス権限を確認し、問題なければ静的コンテンツを返す
具体的なコードとしては以下の様になっております。
・Web.config
<system.webServer>
<handlers>
<add name="Handler" verb="*" path="*.*" type="WebApplication1.Handler" />
</handlers>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
・ハンドラ
using System.IO;
using System.Net;
using System.Web;
using System.Web.SessionState;
namespace WebApplication1
{
public class Handler : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
if (!context.Request.Path.Contains(".aspx") && CanAccess())
{
// 静的コンテンツを返却
context.Response.WriteFile(context.Request.PhysicalPath);
}
else
{
// ログインページに飛ばしたい
context.Server.Execute("~/Login.aspx");
}
}
public bool IsReusable
{
get
{
return true;
}
}
private bool CanAccess()
{
// ログイン状態、アクセス権限について判定。
}
}
}
このように書いた場合、Web.configにadd name="Handler" verb="*" path="*.*"
と設定しているため、
Login.aspxに飛ばすことが出来ないのですが、
handlersで、指定した拡張子以外について(この場合だと.aspx)のみハンドラを登録することは可能でしょうか?
もし可能でない場合は、どのようにすれば本機能を実現できるかご教示いただければと思います。