0

これまでのところ、単純に次のようなカスタムの承認属性があります:(後でロジックを追加します。最初にこの作業を確認したいだけです)。

public class CustomAuthorizeAttribute : AuthorizeAttribute
{

    public override void OnAuthorization(AuthorizationContext filterContext)
    {

        base.OnAuthorization(filterContext);
    }

}

次に、属性をコントローラーに配置します。

[CustomAuthorize(Order = 0)]
public class MyController : Controller

今、

フォーム認証がなくなるまで、これはすべてうまく機能します。

IE

<forms loginUrl="~/myController/myMethod" timeout="30" /> // this timout expires.

このタイムアウト後、カスタム承認属性がヒットしなくなり、代わりに、フォーム認証モジュールが引き継ぐようです。

タイムアウト後、forms authモジュールは、上記のwebconfigコードで指定されたアクションによってレンダリングされたビューを返すだけです。

タイムアウトの期限が切れたときにonAuthorizeアクションをインターセプトしたいので、特定のことについてHttpContextに問い合わせて、条件付きでユーザーをリダイレクトできます。

誰かが似たようなことをしましたか?

4

2 に答える 2

1

実際には、デフォルトの動作


ユーザーが認証されていない状況を処理する場合は、オーバーライド:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
      //your logic
      //...
      //...

      base.HandleUnauthorizedRequest(filterContext);
}

または、ActionFilterAttributeから継承して、ユーザーがカスタムアクションフィルターで認証されているかどうかを確認することもできます。これにより、発生しているフォーム認証の問題を回避できます。

このようなもの:

public class CustomAuthorizeAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
                {
                    //code that handles unauthorized ajax request
                }
                else
                {
                    //code that handles http request
                }
            }

            //you custom authorization logic

        }
    }
于 2012-12-21T15:43:27.133 に答える
0

HttpApplication.AcquireRequestStateにコードを挿入して、認証が有効になったかどうかを監視し、その時点でリダイレクトすることができます。イベントの詳細については、MSDNを参照してください。

于 2012-12-21T15:48:13.043 に答える