2

我有一個ColdFusion網站,它基於登錄的用戶屬性以編程方式在onrequeststart()Application.cfc中處理「禁止」/「未授權」請求。例如(FYI:SESSION.User初始化在onSessionStart()禁止頁面是否總是以403代碼響應?

<cffunction name="onRequestStart" returnType="Boolean" output="false"> 
    <cfargument name="targetPage" type="string" required="true"> 

    <cfparam name="REQUEST.MinSecurityLevel" default="0" /> 
    <cfparam name="REQUEST.IsLoginRequired" default="false" /> 

    <cfif REQUEST.IsLoginRequired AND NOT SESSION.User.isLoggedIn()> 
     <cfscript> 
      SESSION.LoginMessage = 
       "Your session has timed out. Please log in again."; 
      SESSION.LastPageVisited = 
       getPageContext().getRequest().getRequestURI(); 

      if (Len(Trim(getPageContext().getRequest().getQueryString()))) 
       SESSION.LastPageVisited = 
         SESSION.LastPageVisited 
        & "?" 
        & getPageContext().getRequest().getQueryString(); 
     </cfscript> 

     <cflocation url="/user/login/" addtoken="false" /> 
    <cfelseif SESSION.User.getSecurityLevel() LT REQUEST.MinSecurityLevel> 
     <cfheader statuscode="403" statustext="Forbidden" /> 
    </cfif> 

    <cfreturn true /> 
</cffunction> 

在IIS(第7版),我有類型錯誤頁面設置 「執行URL」 和我的自定義403頁路徑

我。能夠觸發此,它可以正確地顯示我的自定義403頁,但它返回一個HTTP響應代碼200

不應該在該返回一個403?

+0

我對你的要求感到困惑。標題表明你問的是403代碼應該返回一個特定的情況,但你的問題似乎指出了一個問題,你試圖發回一個403代碼,但實際上得到一個200代碼返回。你能澄清嗎?如果是後者,我與使用ColdFusion處理的404代碼有同樣的問題。 – 2014-08-28 14:35:38

+0

你想在cfheader之後立即做一個cfabort來停止所有未來的處理嗎?我認爲這將保證你獲得403回報。 – 2014-08-28 14:54:52

+0

@RandyJohnson添加CFABORT具有相同的結果。謝謝,不過。 – 2014-08-28 14:56:12

回答

0

它好像我發現在我的迴應的解決方案到@ Miguel-F上面,我只是模仿

/missing-template/index.cfm:

<cfheader statuscode="404" statustext="Not Found" /> 

/not-authorized/index.cfm:

<cfheader statuscode="403" statustext="Forbidden" /> 
的我做處理404錯誤是什麼KED部分

我認爲403處理程序頁面添加一個403頭將導致無限循環,但它工作正常。

我還添加了在onRequestStart(),因爲沒有必要進行進一步的處理,一旦403被觸發:

<cfelseif SESSION.User.getSecurityLevel() LT REQUEST.MinSecurityLevel> 
    <cfheader statuscode="403" statustext="Forbidden" /> 

    <cfreturn false /> 
</cfif> 
+0

非常高興你得到它的工作!要回答您的其他問題,對於需要用戶身份驗證的頁面,我通常會返回401 Unauthorized。從w3.org讀取這些描述 - ** 401 ** _請求需要用戶驗證。響應必須包含一個WWW-Authenticate頭域,其中包含一個適用於請求資源的挑戰。客戶端可以用合適的授權標頭字段重複請求._ ** 403 ** _服務器理解請求,但拒絕履行請求。授權不起作用,請求不應重複._ – 2014-08-28 15:36:32