我有一个ColdFusion网站,以编程方式处理"禁止" /"未授权"基于登录用户的属性,onrequeststart()
中的Application.cfc
中的请求。例如(仅供参考:SESSION.User
在onSessionStart()
中初始化:
<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吗?
答案 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>