【发布时间】:2015-02-23 15:46:17
【问题描述】:
我正在从 CF 调用一个 jar 文件。在 CF 中,我成功创建了一个 java 类对象。当我要调用我的函数时,它会产生以下错误:
java.security.AccessControlException:访问被拒绝 ("java.net.SocketPermission" "localhost:10648" "listen,resolve")
我怎样才能克服这个异常?我已经在 CF 10 服务器中部署了我们的代码。这是我的 login.cfm 文件代码:
<cfsetting requesttimeout="1000000">
<!---Setting phantomJS path start--->
<cfset phantompath = #ExpandPath("./")# & "phantomjs\phantomjs.exe">
<cfoutput>#phantompath#</cfoutput>
<!---Setting phantomJS path ends--->
<cfset sessionCookies="">
<!---Script for setting JAR file and creating java class object--->
<cfscript>
paths = arrayNew(1);
paths[1] = expandPath("CFDevshop\lib\Counsel_Cookies_Phantom.jar");
writeDump(paths);
loader = createObject("component", "javaloader.JavaLoader").init(paths);
writedump(loader);
classObject = loader.create("counsel_cookies.Counsel_Cookies").init();
writedump(classObject);
try{
sessiondata=classObject.getSessionCookies ("XXX","XXX","https://paser.login.csologin/login.jsf","phantomjs.exe");
}
catch(Any e) {
WriteOutput("<p>An Expression exception was thrown.</p>");
WriteOutput("<p>#e.Message#</p>");
}
writedump(sessiondata);
</cfscript>
这是我的java代码:
public String getSessionCookies(String user, String pass,String loginUrl,String phantomPath) {
StringBuilder builder=new StringBuilder();
try{
DesiredCapabilities caps = new DesiredCapabilities();
caps.setJavascriptEnabled(true);// not really needed: JS enabled by default
caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, phantomPath);
driver = new PhantomJSDriver(caps);
driver.get(loginUrl);
System.out.println(driver.getTitle());
driver.findElement(By.id("login:loginName")).sendKeys(user);
driver.findElement(By.id("login:password")).sendKeys(pass);
waitForJQueryProcessing(driver, 5);
driver.findElement(By.xpath("/html/body/div[3]/div/div[1]/div[1]/div[15]/div[2]/form/div[2]/button[1]")).click();
Thread.sleep(10000);
Set<org.openqa.selenium.Cookie> allCookies=driver.manage().getCookies();
builder.append(" : Thakre2");
for ( org.openqa.selenium.Cookie loadedCookie : allCookies) {
builder.append(String.format("%s->%s, ", loadedCookie.getName(),loadedCookie.getValue()));
//System.out.println(String.format("%s->%s, ", loadedCookie.getName(),loadedCookie.getValue()));
}
} catch(Exception e){
writeFile(e.toString(),logfilepath);
}
return builder.toString();
}
请提供您的建议。如何解决此异常?
【问题讨论】:
-
究竟是哪一行引发了错误?请发布 complete 错误消息和完整的堆栈跟踪。就像我说的on your other thread,您似乎没有发布生成您所描述的错误的实际代码...例如,您的 java 方法需要六 (6) 个,但您的 CF 代码只传递五 (5) 个,所以你应该得到一个“找不到方法错误”。除非错误发生在您调用它之前。但是我们需要查看您的实际代码和完整的错误才能弄清楚。
-
..当你直接在java中测试时,上面的方法是否有效?
-
@Leigh:是的,上面的 java 代码在 java 中运行良好。实际上我在java代码中使用了phantomjs。它从java代码执行phantomjs.exe并将结果返回到CF文件。
-
@leigh:当我从本地系统运行此代码时,它的工作非常好。但是当我将此代码放在 CF 10 服务器上时,它会显示上述异常:java.security.AccessControlException:访问被拒绝(“java.net.SocketPermission”“localhost:10648”“listen,resolve”)。
-
您没有发布完整的错误消息和跟踪,所以我只能猜测。但是,就像亚当提到的那样,这可能是权限。你用谷歌搜索错误信息的第一行吗?它出现了很多对missing permissions in your
java.policyfile 的引用。另请参阅 JDK7 Change in Default Socket Permissions 和 docs.oracle.com/javase/7/docs/technotes/guides/security/…
标签: java coldfusion phantomjs coldfusion-10