Pergunta

Eu tenho um website escrito em ColdFusion que contém ambos os habituais páginas web interativas e algumas tarefas executadas pelo programador CF. O dir layout é

/
/app
/scheduledTasks

Eu gostaria as tarefas a ser capaz de usar todas as mesmas configurações, etc. criados no interior Application.cfc de app / então eu gostaria de mover esse diretório inteiras / scheduledTasks em / app. O problema é que que Application.cfc usa o mecanismo cflogin e meu próprio registro no formulário. O programador CF só permite que você fornecer um nome de usuário e senha para autenticação HTTP Basic. As tarefas agendadas nunca vai passar por isso. Como posso resolver este ou há uma abordagem melhor para começar?

Já se perguntou sobre a olhar para algumas variáveis ??CGI em OnRequestStart do meu Application.cfc como o agente do usuário, o IP remoto, e / ou um valor mágico no param URL do e se todos estão lá, a segurança do desvio desde que eu " sabe" que é programador do CF na outra extremidade. Esta não é grande segurança, mas isso pode ser aceitável.

Eu também quis saber sobre a criação de um novo Application.cfc em minha raiz que o Application.cfc em herda / app de. Eu deixaria as tarefas onde elas estão e colocar um novo Application.cfc lá também que herda material comum a partir da raiz. Isso aumenta a complexidade embora e eu tive problemas ao tentar acessar os CFCs dentro de / app / CFC a partir de / scheduledTasks.

Alguém já teve um problema semelhante e resolvido isso?

Foi útil?

Solução

deixar as tarefas de programa em sua própria pasta como você tem atualmente-lo fora da raiz do site.

criar um Application.cfc nas scheduletasks pasta que estende a um no diretório apps assim:

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

sobrecarregar o método OnRequestStart e colocar em sua autenticação assim:

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

Esta é a segurança muito básico, mas vai começar o trabalho feito. personalizar ao seu gosto.

Outras dicas

De imediato, eu iria criar uma função personalizada para a aplicação prevista. Então, em sua aplicação principal, aplicá-lo automaticamente quando o pedido vem do servidor local.

ColdFusion tarefas agendadas passar em certos dados nas informações do CGI, incluindo:

HTTP_USER_AGENT = CFSCHEDULE

Agora HTTP_USER_AGENT é fakeable então a pergunta seguinte é determinar o quão seguro você precisa de acesso para a pasta. Você só deseja CF para executar essas tarefas? Ou você quer para executá-los de fora também? Apenas o seu computador? Etc Uma vez que é determinado você pode codificar para ele e solução das rip747 é uma boa, então eu não vou sugerir qualquer outra coisa! ;)

Vou verificar apenas que o pedido vem de um IP local (se você estiver executando o cronograma no mesmo servidor ...) ..... outro (creio melhor) solução é o que eu normallydo para permitir webservices ou monitoramento rotinas sendo usado externamente e sem login:

Por que você Application.cfc, método onApplicationStart, colocar algo como:

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

Em seguida, em seu OnSessionStart (ou qualquer método que você usuário para impedir o acesso autorizado não e redirecionamento para login:

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

Algumas vantagens neste método são: 1.Se o software chamador não implementar cookie e mantém o estado da sessão, ele funciona. 2. se o software chamador FAZ manter a sessão, o acesso é concedido para páginas protegidas passar CFID & CFTOKEN na url chamada. 3. se muito flexível e nenhum outro do que adicionar um novo diretório, eventualmente, e destruir o APLICAÇÃO ... (eu uso

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

no método OnRequestStart e

<cfset StructClear(application)>

como a minha primeira linha no método onApplicationStart.

Espero que ajude!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top