Pregunta

Tengo un sitio web escrito en ColdFusion que contiene tanto las páginas web interactivas habituales y algunas tareas se ejecutan a través del planificador CF. La disposición es dir

/
/app
/scheduledTasks

Me gustaría que las tareas para poder utilizar todas la misma configuración, etc. creados en el interior de Application.cfc / app así que me gustaría para mover ese directorio / scheduledTasks en / app. El problema es que Application.cfc que utiliza el mecanismo de cflogin y mi propio registro en la forma. El planificador CF sólo se permite proporcionar un nombre de usuario y la contraseña de autenticación básica HTTP. Las tareas programadas nunca conseguir más allá de eso. ¿Cómo puedo resolver esto o hay un mejor enfoque para empezar?

Me he preguntado mirando alguna variable CGI en OnRequestStart de mi Application.cfc como el agente de usuario, la dirección IP remota, y / o un valor de magia en el parámetro URL y si todos están allí, la seguridad de puente ya que " sabe" que es programador CF en el otro extremo. Esto no es una gran seguridad pero puede ser aceptable.

También he preguntado acerca de la creación de un nuevo Application.cfc en mi raíz que la Application.cfc en / app hereda de. Me gustaría dejar las tareas en las que se encuentran y poner una nueva Application.cfc allí también que hereda la materia común de la raíz. Esto aumenta la complejidad y aunque he tenido problemas al intentar acceder a los CFC dentro de / app / CFC desde / scheduledTasks.

Alguien ha tenido un problema similar y lo resolvió?

¿Fue útil?

Solución

dejar las tareas del horario en su propia carpeta como el que tiene actualmente fuera de la raíz del sitio.

crear una Application.cfc en la carpeta que se extiende scheduletasks el que está en el directorio de aplicaciones de esta manera:

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

sobrecargar el método onrequeststart y poner en su autenticación, así:

<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>

Esto es muy básico, pero la seguridad será hacer el trabajo. personalizar a su gusto.

Otros consejos

A primera vista, me gustaría crear una función personalizada para la aplicación programada. Luego, en su aplicación principal, se aplican automáticamente cuando la solicitud proviene del servidor local.

ColdFusion tareas programadas pasan en ciertos datos en la información CGI incluyendo:

HTTP_USER_AGENT = CFSCHEDULE

Ahora HTTP_USER_AGENT es fakeable por lo que la siguiente pregunta es para determinar el grado de seguridad es necesario tener acceso a la carpeta. ¿Sólo quiere CF ejecutar estas tareas? O quieres para ejecutarlos desde fuera así? Sólo el equipo? Etc. Una vez que se determina que puede codificar para ello y de rip747 solución es buena, así que no voy a sugerir cualquier otra cosa! ;)

Voy a comprobar simplemente que la solicitud proviene de una IP local (si está ejecutando el programa en el mismo servidor ...) ..... otra (creo que mejor) solución es lo que normallydo para permitir servicios web o rutinas de monitoreo se utilizan externamente y sin entrada:

En que Application.cfc, método onApplicationStart, puso algo como:

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

A continuación, en su onSessionStart (o lo que el usuario método para prevenir el acceso no autorizado y redirigir al iniciar sesión:

<!--- 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>

etc .......

Algunas de las ventajas de este método son: 1. Si el software de la persona que llama no implementa galleta y mantiene el estado de sesión, funciona. 2. Si el software de llamadas sí mantiene la sesión, se concede el acceso a las páginas protegidas que pasan CFID y CFTOKEN en la url llamada. 3. si es muy flexible y más mantenimiento que añadir un nuevo directorio con el tiempo y destruir LA APLICACIÓN ... (yo uso

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

en el método onRequestStart y

<cfset StructClear(application)>

como la primera línea en el método onApplicationStart.

Espero que ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top