首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Coldfusion8中使用javaloader建立java库?

如何在Coldfusion8中使用javaloader建立java库?
EN

Stack Overflow用户
提问于 2012-06-10 15:57:08
回答 1查看 2K关注 0票数 0

我试图让javaLoader在Coldfusion8应用程序中运行,我需要一些帮助才能跨越终点线。

到目前为止,这就是我所拥有的:

内部application.cfc

代码语言:javascript
复制
...
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类,如下所示:

代码语言:javascript
复制
<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>                             

我可以转储加密变量,但是当我尝试创建BCrypt实例时,脚本会失败。

问题

我很高兴我做到了这么远,但我已经坐了几个小时了,不知道我做错了什么。希望更有洞察力的人能给我指明方向?

谢谢你帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-10 17:42:39

好的。有几个错误。

若要使用Coldfusion8和BCrypt或您选择的Javaloader设置Javaloader,请执行以下操作:

1)将任何Java类( .java文件,而不是.class文件)放在webroot/htdocs(Apache)的文件夹中。我的BCrypt路径如下所示:

代码语言:javascript
复制
  htdocs/classes/jBCrypt/

2)对javaloader也这样做。我的道路是这样的:

代码语言:javascript
复制
  htdocs/tools/javaloader/

3)在Application.cfc

代码语言:javascript
复制
<!--- 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类,您现在可以从其他地方引用这些类,如下所示:

代码语言:javascript
复制
<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文件,这是我最初所做的。

以下链接也可能有帮助:

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10970133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档