0

私はjavaLoaderをColdfusion8アプリケーションで実行しようとしていますが、フィニッシュラインを通過するためにいくつかの助けが必要です。

これは私がこれまでに持っているものです:

application.cfcの内部:

...
THIS.mappings["/javaloader"] = GetDirectoryFromPath( GetCurrentTemplatePath() ) & "tools/javaloader";
... 

<cffunction name="onApplicationStart" returnType="boolean" output="false" hint="application initalizer">
    <cfscript>
    Application.str = structNew();
    Application.str.myJavaLoaderKey = "someUUID_javaloader";
    Application.str.jarPaths = arrayNew(1);
    </cfscript>
    <cfif ( NOT structKeyExists(server, Application.str.myJavaLoaderKey) )>
        <!--- add path to class files to jarPath Array --->
        <cfset Application.str.jarPaths[1] = expandPath("/classes/BCrypt.class")>
        <!--- this will map out to: ...htdocs/classes/BCrypt.class --->

        <cfif ( NOT structKeyExists(server, Application.str.myJavaLoaderKey) )>
            <cflock name="#Hash(Application.str.myJavaLoaderKey)#" type="exclusive" timeout="10">
                <cfset server[Application.str.myJavaLoaderKey] = createObject("component", "javaloader.JavaLoader")>
                <!--- tried .init(Application.str.jarPaths) here, but didn't do anything --->
            </cflock>
        </cfif>
    </cfif>
    <cfreturn true />
</cffunction>

これは、ここここからの指示に従って行われました。

私のhandler.cfcでは、次のようにjavaloaderとBCryptクラスにアクセスしようとしています。

<cfsript>
    pass = "some_password";
    <!--- this is accessible --->
    cryptonite = server[Application.str.myJavaLoaderKey];
    <!--- now trying to call init() with respective path to create an instance --->
    <!--- BREAKS HERE --->
    bCrypt = cryptonite.init(Application.str.jarPaths[1]);

    hashed = bCrypt.hashpw(pass, bcrypt.gensalt());        
</cfscript>                             

cryptonite変数を正常にダンプできますが、BCryptのインスタンスを作成しようとすると、スクリプトが失敗します。

質問
ここまで到達できてうれしいですが、何が間違っているのかわからないまま、数時間これに座っています。うまくいけば、より洞察力のある誰かが私を方向に向けることができますか?

手伝ってくれてありがとう!

4

1 に答える 1

2

Ok。いくつかの間違いがありました。

Coldfusion8とBCryptまたは選択したJavaクラスを使用してJavaloaderをセットアップするには、次のようにします。

1)任意のJavaクラス(.classファイルではなく.javaファイル)をwebroot / htdocs(Apache)のフォルダーに配置します。BCryptへの私のパスは次のようになります:

  htdocs/classes/jBCrypt/

2)javaloaderについても同じようにします。私のパスは次のようになります。

  htdocs/tools/javaloader/

3)Application.cfcの場合

<!--- create mapping to javaloder --->
<cfscript>        
    THIS.mappings["/javaloader"] = GetDirectoryFromPath( GetCurrentTemplatePath() ) & "tools/javaloader";
</cfscript>

<!--- Application start --->
<cffunction name="onApplicationStart" returnType="boolean" output="false" hint="">
    <cfscript>       
        <!--- store a UUID and emptry path array in Application scope --->
        Application.str = structNew(); 
        Application.str.myJavaLoaderKey = "your_uuid_javaloader";
        Application.str.jarPaths = arrayNew(1);
    </cfscript>
     <!--- check if exists --->
    <cfif ( NOT structKeyExists(server, Application.str.myJavaLoaderKey) )>

         <!--- put all paths to your .java files here, this is for JBCrypt --->
         <cfset Application.str.jarPaths[1] = expandPath("/classes/jBCrypt-0.3")>
         <cfif ( NOT structKeyExists(server, Application.str.myJavaLoaderKey) )>

            <cflock name="#Hash(Application.str.myJavaLoaderKey)#" type="exclusive" timeout="10">
                <!--- create javaloader object and init with all submitted paths --->
                <cfset server[Application.str.myJavaLoaderKey] = createObject("component", "javaloader.JavaLoader").init(sourceDirectories=Application.str.jarPaths )>
            </cflock>
        </cfif>
    </cfif>
</cffunction>

セットアップは、ここのようにアプリケーションスコープ内にある必要があります。これにより、次のように他の場所から参照できるすべての.javaクラスが設定されます。

<cfscript>
    var pass = "a_password";
    javaLoader = server[Application.str.myJavaLoaderKey];
    // create an instance of javaloader-BCrypt
    bcrypt = javaLoader.create("BCrypt").init();
    // now you can call methods from bcrypt like so:
    hashed = bcrypt.hashpw(pass, bcrypt.gensalt());
</cfscript>

ここを読んでそれを理解しました。私が最初に行った.classファイルではなく、 .javaファイルを参照する必要があることがわかりました。

次のリンクも役立つ場合があります。http:
//blog.mxunit.org/2011/02/hashing-passwords-with-bcrypt-in.html
http://www.compoundtheory.com/javaloader/docs/
http:/ /www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/using-bcrypt-in-coldfusion-10-370

于 2012-06-10T17:42:39.323 に答える