我需要保护对.NET webapp中所有页面的访问权限 - 来自:
的EXCEPT请求应将所有其他requesets重定向到登录表单
我正在考虑HttpModule的方向 - 但从未写过一个。 任何人都可以提出任何想法吗?
谢谢!
答案 0 :(得分:0)
我宁愿构建一个全局身份验证方法来检查ip。在MasterPage的OnInit或OnLoad中调用此函数或您自己的System.Web.Page实现应该可以解决这个问题。
如果用户必须登录,请在会话中设置一些随机生成的ID以进行检查(将随机ID保存到数据库和会话中)。在您的全局身份验证方法中,您现在可以检查有效的ip范围或有效的(数据库注册的)会话令牌。
答案 1 :(得分:0)
使用HttpModule是最好的方法。您可以在页面执行之前使用它来捕获任何请求,并在需要时重定向到登录表单。
public class SecurityModule : IHttpModule
{
private HttpApplication m_HttpApplication;
public void Init(HttpApplication context)
{
m_HttpApplication = context;
m_HttpApplication.PreRequestHandlerExecute += new EventHandler(OnPreRequestHandlerExecute);
}
public void Dispose()
{
// Do Nothing
}
private void OnPreRequestHandlerExecute(object sender, EventArgs e)
{
// Get IP address
string ipAddress = m_HttpApplication.Context.Request.UserHostAddress;
// Check if the IP address requires login
bool requiresLogin = ValidateIpAddress(ipAddress);
// Redirect if required
if (requiresLogin)
Response.Redirect("~/Login.aspx", true);
}
private bool ValidateIpAddress(string ipAddress)
{
// This method would check that the IP address is from the local
// network or in the database and return true or false accordingly.
return false;
}
}
您还需要修改web.config并添加对模块的引用:
<httpModules>
<add name="SecurityModule" type="MyApp.SecurityModule, MyApp"/>
</httpModules>
此代码还需要进行一些修改,以确保登录的用户不会重定向回登录页面,但它应足以让您入门。
答案 2 :(得分:0)
以下是基于正则表达式的自定义授权模块: http://code.google.com/p/talifun-web/wiki/RegexUrlAuthorizationModule
应该很容易重构你的需求。