ASP.NET的后台程序,登录怎么拦截啊

杨友山
博客专家认证
2011-08-26 03:11:16
各位高手们,
我刚接触asp.net,正在在重写一个软件后台,用asp.net,我发现之前的人写的,每个aspx里都要判断有没有登录过,没登录的就跳到登录页面,我以前看过jsp,里面好像就有个事件监听什么的,只要是登录请求在那里统一判断,然后决定跳转,不知道这个asp.net是怎么处理这种的,麻烦一定帮忙看看。
...全文
596 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
杨友山 2011-09-27
  • 打赏
  • 举报
回复
杨友山 2011-09-06
  • 打赏
  • 举报
回复
我查了个 继承一个页面的那种,
http://blog.csdn.net/yysyangyangyangshan/article/details/6750049
先用着,以后遇到好的了再说。
杨友山 2011-08-29
  • 打赏
  • 举报
回复
好的,那我准备试试。
wuxiaoke2009 2011-08-28
  • 打赏
  • 举报
回复
学习啦
  • 打赏
  • 举报
回复
请写出你的第三种工作量小、有不是一刀切、又是可以适合各种请求的建议,好吗?
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 phoebuswei 的回复:]
代理XXX.asmx,不用asp ajax可以绕过去
但是XXX.asmx里面也有开放和私有问题,
您的优雅代码是不是工作量也不小
[/Quote]

晕!

你的意思是:所以其它回复中的关于为Page建立一个父类的方法,就可以处理asmx了?

我想这个问题你可能是一刀切了。我相信你有能力修改一行代码来判断你的请求的类型。这里的关键是不需要弄到Page上面去(比如,实际上很多Page可能已经有别的父类了)。视而不见我就没有办法了。
  • 打赏
  • 举报
回复
你看了代码了吗?我想没有。

你可以判断任何你的接口。
phoebuswei 2011-08-28
  • 打赏
  • 举报
回复
代理XXX.asmx,不用asp ajax可以绕过去
但是XXX.asmx里面也有开放和私有问题,
您的优雅代码是不是工作量也不小
phoebuswei 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 sp1234 的回复:]

监听 PreRequestHandlerExecute 这个事件时,判断请求的是不是页面,同时判断是不是任何一种登录页面。如果是页面但是不是登录页面,那么就判断是否给客户端制定过授权号,如果指定过授权号就从后台判断这个授权号是否是有效的授权号(是否对应了一个用户),如果没有授权或者授权号无效,就导航到一个默认的登录页去。
[/Quote]
这样不好吧!
如果发起的是一个
DefaultHttpHandler
或者是一个
ScriptHandlerFactory
页面中+了一个《script XXX.asmx
感觉您给他一刀齐

陌上青青草 2011-08-28
  • 打赏
  • 举报
回复
留脚印,慢慢学习。
gzdiablo 2011-08-28
  • 打赏
  • 举报
回复
通常登陆都是判断会话,当然也有Thread.CurrentPrincipal.Identity.Name

void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
var context = HttpContext.Current;
if (context.Handler is IRequiresSessionState)
{
var passport= context.Session["username"];
if (passport==null)
{
context.Response.Redirect("~/login.aspx");
}
}
}
rollng 2011-08-28
  • 打赏
  • 举报
回复
你在csdn 或者cnblogs里面以 权限管理 开源 搜索就是了,相信你会受益匪浅的
ho921221 2011-08-28
  • 打赏
  • 举报
回复
可以先看看session或者Cookie里有没有用户登录的记录,如果没有就跳转到登录界面,验证成功后将相关信息存储到session或Cookie里面,希望对你有用
ycproc 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lmaohuanl 的回复:]

XML code
http://go.microsoft.com/fwlink/?LinkId=169433
-->

<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<authentication mode="Forms">
<……
[/Quote]

在配置文件里面去配置

同时 保险一点的话 写一个 公共的类 去每个页面继承

去page_load的时候去做用户判断
  • 打赏
  • 举报
回复
监听 PreRequestHandlerExecute 这个事件时,判断请求的是不是页面,同时判断是不是任何一种登录页面。如果是页面但是不是登录页面,那么就判断是否给客户端制定过授权号,如果指定过授权号就从后台判断这个授权号是否是有效的授权号(是否对应了一个用户),如果没有授权或者授权号无效,就导航到一个默认的登录页去。
  • 打赏
  • 举报
回复
哦这里少了一个对登录也的判断。你可以在app_code里边.cs写一个接口定义
public interface  ILoginPage
{
}

然后为你的登录页面(可能不止一个)的定义中加上使用这个接口。然后上面的示例代码应该改一下,为:
void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
var context = HttpContext.Current;
var page=context.Handler as Page;
if (page!=null && !(page is ILoginPage))
{
var passport = context.Request.Cookies["授权号"];
if (passport==null || GetUserByPassportID(passport)==null)
context.Response.Redirect("~/login.aspx");
}
}
  • 打赏
  • 举报
回复
[Quote=引用楼主 yysyangyangyangshan 的回复:]
我以前看过jsp,里面好像就有个事件监听什么的,只要是登录请求在那里统一判断,然后决定跳转,不知道这个asp.net是怎么处理这种的,麻烦一定帮忙看看。
[/Quote]

在你的Global.asax文件中判断。例如可以这样写:
void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
var context = HttpContext.Current;
if (context.Handler is Page)
{
var passport = context.Request.Cookies["授权号"];
if (passport==null || GetUserByPassportID(passport)==null)
context.Response.Redirect("~/login.aspx");
}
}
yyl8781697 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 rock870210 的回复:]

public class MainPage : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
//这里检查是否登录过
base.OnLoad(e);
}
}
其他页面都继承该页面即可
public partial class……
[/Quote]
+1
SomethingJack 2011-08-27
  • 打赏
  • 举报
回复
最简单的办法就是 - -session存储用户信息 然后判断 如果没有登录就跳转到登录页面
MSDNXGH 2011-08-27
  • 打赏
  • 举报
回复
答案己出
加载更多回复(19)

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧