追风逐月

关注网络赚钱、网赚经验、网赚工具、SEO、国外主机信息

推荐使用

订阅追风逐月博客feed
订阅到google 订阅到哪吒
订阅到鲜果 订阅到抓虾
* 更多订阅本站方式请看 订阅帮助

解决Asp.net网站url重定向+form验证模块顺序问题

2007年04月26日 • 追风逐月 • 分类: 技术开发, 网站建设

一直以来都在项目中使用了UrlRewritingNet模块来实现url重定向的功能,很是方便好用。但有一个问题一直没有解决,就是当用户访问需要登陆的页面是会自动转到login页面,这时其returl参数会将原始的url暴露出来,很是不爽。
今天花了点时间研究了一下,发现

  1. UrlRewriteModule是在BeginRequest事件中进行重写的
  2. Form认证模块(FormsAuthenticationModule)是在AuthenticateRequest中进行权限判断的
  3. AuthenticateRequest事件晚于BeginRequest执行,所以认证过程中产生的returl肯定是取不到原始的rawurl了
  4. 为了让returl能够保持为原始的url,需要将UrlRewriteModule的重写改在AuthorizeRequest事件中执行

UrlRewritingNet没有提供这种选项,所幸的是这是个开源的工程,于是将其代码进行了一些修改。增加了一个RewriteOnRequestBegin的配置参数,在其初始化方法中修改代码如下:

PLAIN TEXT

C#:

  1. if (UrlRewriting.Configuration.RewriteOnRequestBegin)

  2. {

  3. context.BeginRequest += new EventHandler(OnBeginRequest);

  4. }

  5. else

  6. {

  7. context.AuthorizeRequest += new EventHandler(OnBeginRequest);

  8. }

这样我们就可以随便配置是要在认证前重新还是认证后重写了。
参考:

  1. form认证流程图
  2. 事件执行顺序
    执行Application_BeginRequest
    执行Application_AuthenticateRequest
    执行Application_AuthorizeRequest
    执行Application_ResolveRequestCache
    执行Application_AcquireRequestState
    执行Application_PreRequestHandlerExecute
    执行Application_PostRequestHandlerExecute
    执行Application_ReleaseRequestState
    执行Application_UpdateRequestCache
    执行Application_EndRequest
标签: , ,

你可能还喜欢



共有1人发表了评论 »

  1. order viagra

发表你的意见