問題描述
我正在嘗試讓 javaLoader 在 Coldfusion8 應用程序中運行,我需要一些幫助才能讓我越過終點線.
I'm trying to get javaLoader to run in a Coldfusion8 application and I need some help to get me across the finish line.
這是我目前所擁有的:
在 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 類,如下所示:
In my handler.cfc, I'm trying to access javaloader and the BCrypt class like so:
<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的實例時,腳本失敗了.
I can dump the cryptonite variable allright, but when I try to create the instance of BCrypt, the script fails.
問題:
我很高興我能做到這一點,但我已經坐了幾個小時了,不知道我做錯了什么.希望有更多見識的人可以為我指明方向?
Question:
I'm happy I made it this far, but I've been sitting on this for a few hours now with no clue what I'm doing wrong. Hopefully someone with more insight can point me in a direction?
感謝您的幫助!
推薦答案
好的.有幾個錯誤.
要使用 Coldfusion8 和 BCrypt 或您選擇的 Java 類設置 Javaloader,請執行以下操作:
To setup Javaloader with Coldfusion8 and BCrypt or a Java Class of your choice, do the following:
1) 將任何 Java 類(.java 文件,而不是 .class 文件)放在 webroot/htdocs(Apache) 的文件夾中.我的 BCrypt 路徑如下所示:
1) Put whatever Java Classes (the .java file, not the .class file) in a folder in your webroot/htdocs(Apache). My path for BCrypt looks like this:
htdocs/classes/jBCrypt/
2) 對 javaloader 執行相同的操作.我的路徑如下所示:
2) Do the same for javaloader. My path looks like this:
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 類,如下所示:
The setup should be in the application scope as per here. This should set up all .java classes which you can now reference from elsewhere like so:
<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>
通過這里了解它.原來你必須參考 .java 文件而不是 .class 文件,我最初是這樣做的.
Figured it out reading through here. Turns out you have to refer to the .java file and not the .class file, which I initally did.
以下鏈接也可能會有所幫助:
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
The following links may also be helpful:
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
這篇關于如何在 Coldfusion8 中使用 javaloader 設置 java 庫?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!