Я нахожу способ выполнить аутентификацию с помощью IHttpModule
и Session
,
context_PreRequestHandlerExecute
будет перехватывать все запросы раньше, чем действия в контроллере:
1. add AuthenticModule class
public class AuthenticModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
HttpApplication ha = (HttpApplication)sender;
string path = ha.Context.Request.Url.ToString();
int n = path.ToLower().IndexOf("login");
if (n == -1 ) //if not login page
{
//if user not login (doesn't have session)
if(HttpContext.Current.Session["user"] == null)
{ //redirect to Login page
ha.Context.Response.Redirect("~/Home/Login");
}
}
}
}
2. add AuthenticModule to web.config
<system.webServer>
<modules>
<add name="AuthenticModule" type="NAMESPACE.AuthenticModule, ASSEMBLY_NAME"></add>
</modules>
</system.webServer>
но у меня проблема в том, что у меня есть /Home/Login
и Home/Index
страницы в HomeController
и html Home/Index
Page contians <img src="/IMG/tree.jpg" />
:
public class HomeController : Controller
{
public ActionResult Login()
{
Session["user"] = "user";
return Content("Logining");
}
public ActionResult Index()
{
return View();
}
}
and Home/Index Page contians <img src="/IMG/tree.jpg" />
Тогда,
Сначала перейдите на URL /Home/Login
, затем он перейдет в context_PreRequestHandlerExecute
, и поскольку URL содержит «логин», поэтому он просто пройдет и перейдет в действие Login()
, это 'Я установлю Сеанс, что означает простоту входа в систему здесь просто.
И моя проблема в том, что, если я затем запускаю /Home/Index
, <img src="/IMG/tree.jpg" />
также отправит запрос в context_PreRequestHandlerExecute
, и я нашел его HttpContext.Current.Session
равен NULL и вызывает Session["user"]
исключение нулевой ссылки
, поэтому этот способ аутентификации не будет работать, пока любая страница содержит img src
ссылку на собственный образ сервера.
Есть ли здесь что-то, что можно улучшить, чтобы этот способ аутентификации IHttpModule
работал нормально, даже если страница содержит img src
ссылкуДоступ к самоизображению сервера?или это тупик?