문제

ColdFusion으로 작성된 웹 사이트가 일반적인 대화 형 웹 페이지와 CF 스케줄러를 통해 실행되는 일부 작업이 포함되어 있습니다. DIR 레이아웃은입니다

/
/app
/scheduledTasks

Application.cfc 내부에서 생성 된 모든 동일한 설정 등을 사용하여 작업 전체 /ScheduledTasks 디렉토리를 /앱으로 이동하고 싶습니다. 문제는 application.cfc가 Cflogin 메커니즘과 내 로그인 양식을 사용한다는 것입니다. CF 스케줄러를 사용하면 HTTP 기본 인증에 대한 사용자 이름과 비밀번호 만 제공 할 수 있습니다. 예정된 작업은 결코 지나치지 않을 것입니다. 이것을 어떻게 해결할 수 있습니까? 아니면 더 나은 접근 방식이 있습니까?

Application.cfc의 사용자 에이전트, 원격 IP 및/또는 URL PARAM의 마법 값과 같은 CGI의 일부 CGI 변수를보고 궁금했습니다. 다른 쪽 끝에 CF의 스케줄러. 이것은 큰 보안은 아니지만 수용 가능할 수 있습니다.

또한 application.cfc in /앱이 상속받는 루트에서 새로운 application.cfc를 작성하는 것에 대해 궁금했습니다. 나는 그들이있는 곳에 작업을 떠나고 새로운 응용 프로그램을 넣었습니다. CFC는 루트에서 일반적인 물건을 물려받을 수 있습니다. 이것은 복잡성을 증가시키고 /scheduledtasks의 /app /cfcs 내부의 CFC에 액세스하려고 할 때 문제가있었습니다.

누구든지 비슷한 문제를 겪고 해결 한 사람이 있습니까?

도움이 되었습니까?

해결책

현재 사이트의 루트에 해당하는 것처럼 일정 작업을 자신의 폴더에 두십시오.

ScheduleTasks 폴더에서 Application.cfc를 작성하여 앱 디렉토리에서와 같은 폴더를 확장합니다.

<cfcomponent extends="/.apps/application">

OnRequestStart 메소드를 과부하하고 다음과 같은 인증에 넣습니다.

<cffunction name="onRequestStart" returntype="void" access="public" output="false">
    <cfargument name="targetPage" type="any" required="true">
    <cfif not structkeyexists(url, "access") or not url.access eq application.ApplicationName>
        <cflocation url="/" addtoken="false">
    </cfif>
</cffunction>

이것은 매우 기본적인 보안이지만 작업을 완료 할 것입니다. 당신의 취향에 맞게 사용자 정의하십시오.

다른 팁

Offhand, 예정된 응용 프로그램에 대한 사용자 정의 역할을 만들 것입니다. 그런 다음 기본 응용 프로그램에서 요청이 로컬 서버에서 오면 자동으로 적용하십시오.

ColdFusion Scheduled Tasks는 다음을 포함한 CGI 정보의 특정 데이터를 통과합니다.

http_user_agent = cfschedule

이제 http_user_agent는 가짜가되므로 다음 질문은 폴더에 액세스 해야하는 방법을 결정하는 것입니다. CF만이 작업을 실행하기를 원하십니까? 아니면 외부에서도 실행하고 싶습니까? 단지 컴퓨터? 일단 결정되면 코딩 할 수 있고 RIP747의 솔루션은 좋은 것이므로 다른 것을 제안하지 않을 것입니다! ;)

요청이 로컬 IP에서 나오는지 확인하겠습니다 (동일한 서버에서 일정을 실행하는 경우 ...) ..... 다른 (더 나은) 솔루션은 웹 서비스 나 모니터링 루틴을 허용하는 것이 일반적입니다. 외부 및 로그인없이 사용 :

on application.cfc, method onapplicationStart, 다음과 같은 내용을 넣으십시오.

<!--- List of Directories Excluded from Login --->
<cfset application.ExcludedLoginDirs = "/monitoring/registration/wservices/">   

그런 다음 OnsessionStart (또는 허가되지 않은 액세스를 방지하고 로그인하도록 리디렉션하는 방법 :

<!--- Find current directory --->
<cfset currentDir = listgetAt("-," & cgi.Script_Name, listLen("-," & cgi.script_Name, "/")-1, "/")>

<!--- Exclude LOGIN if user authenticated or Directory Excluded --->
<!--- In this code, I FORCE login if user is NOT autenticated AND directory is NOT excluded --->
<cfif Val(session.User_ID) EQ 0 AND ListFind(application.ExcludedLoginDirs, "#currDir#", "/") EQ 0> 
      ............Login..........
</cfif>

등.......

이 방법에 대한 몇 가지 장점은 다음과 같습니다. 1. 발신자 소프트웨어가 쿠키를 구현하지 않고 세션 상태를 유지하는 경우 작동합니다. 2. 발신자 소프트웨어가 세션을 유지하는 경우 CFID 및 CFTOKE를 통과하는 보호 된 페이지에 액세스 권한이 부여됩니다. 3. 매우 유연하고 유지 보수가없는 경우 새 디렉토리를 추가하고 결국 응용 프로그램을 파괴하는 것입니다 ... (나는 사용합니다.

<cfif isDefined("url.destroyApp")>
     <cfset reinit = this.onApplicationStart()>
</cfif> 

onrequestStart 메소드에서

<cfset StructClear(application)>

OnApplicationStart 메소드의 첫 번째 줄로.

도움이되기를 바랍니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top