2012-06-26 65 views
1

我有一個帶有自定義成員資格提供程序的ASP.NET MVC3應用程序。如果用戶不在角色中,則偵聽請求

我在web.config中指定的loginUrl如下:

<forms loginUrl="~/SSO/LogOn" timeout="86400" slidingExpiration="true"/> 

我想知道,當用戶點擊一個網頁,我可以怎麼截獲這個請求,他們沒有訪問權限,所以我可以附加一些東西到這個URL。

+0

你想牛逼o根據您網站中的目標網址向SSO攔截請求? – YavgenyP

+0

@YavgenyP這是更有說服力的措詞,是的! – Nick

回答

1

假設你有一個名爲SSO控制器,並呼籲登錄時爲其行動的方法,我想你只需要延長AuthorizeAttribute:

public class AppendingAuthorizeAttribute : AuthorizeAttribute 
{   
    protected override void HandleUnauthorizedRequest(AuthorizationContext context) 
    { 
     var url = new UrlHelper(context.RequestContext); 
     var logonUrl = url.Action("LogOn", "SSO", new {appendedQueryStringParameter = "somevalue"}); 
     filterContext.Result = new RedirectResult(logonUrl); 
    } 
} 

只是註釋需要授權的具有這種屬性的控制器/ action方法,它應該重定向到URL看起來像:

/SSO/LogOn支持appendedQueryStringParameter = someValue中

+0

這真的很有用,謝謝。有沒有辦法來覆蓋現有的授權屬性? – Nick

+0

顯然你可以用相同的名稱覆蓋它,而MVC將使用它來代替默認的:[http://stackoverflow.com/a/5844884/968301](http://stackoverflow.com/a/5844884/968301 ) –

相關問題