如何在 Coldfusion8 中使用 javaloader 设置 java 库?

How to setup java libraries with javaloader in Coldfusion8?(如何在 Coldfusion8 中使用 javaloader 设置 java 库?)

本文介绍了如何在 Coldfusion8 中使用 javaloader 设置 java 库?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试让 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 库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何在 Coldfusion8 中使用 javaloader 设置 java 库?

基础教程推荐