禁止页面是否总是以403代码响应?

时间:2014-08-28 14:20:09

标签: iis coldfusion http-status-code-403 httpforbiddenhandler

我有一个ColdFusion网站,以编程方式处理"禁止" /"未授权"基于登录用户的属性,onrequeststart()中的Application.cfc中的请求。例如(仅供参考:SESSION.UseronSessionStart()中初始化:

<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)中,我有一个错误页面设置,其中包含Type&#34; Execute URL&#34;和我的自定义403页面路径。

我能够触发它,并且它正确显示我的自定义403页面,但它返回HTTP响应代码200.

不应该返回403吗?

1 个答案:

答案 0 :(得分:0)

好像我在上面对@ Miguel-F的回复中找到了一个解决方案。我简单地模仿了我为处理404错误所做的部分工作:

<强> /missing-template/index.cfm:

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

<强> /not-authorized/index.cfm:

<cfheader statuscode="403" statustext="Forbidden" />

我认为向403处理程序页面添加403标题会导致无限循环,但它可以正常工作。

我还添加了onRequestStart(),因为403触发后无需进一步处理:

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

    <cfreturn false />
</cfif>