我正嘗試使用Amazon的SDK將文件從Java applet上傳到Amazon S3。該applet位於運行Spring的Web服務器上。在Spring服務器上初始化Java Applet中的AWS
問題是,在我嘗試上傳我的文件之前,我需要初始化Amazon S3客戶端。這通常是非常簡單的:
AWSCredentials credentials = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);
AmazonS3Client s3Client = new AmazonS3Client(credentials);
但是,當我這樣做,第二行(不管證書是否正確與否)觸發此錯誤消息:
java.lang.ClassFormatError: Incompatible magic value 1008813135 in class file <!DOCTYPE html>
at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_66]
at java.lang.ClassLoader.defineClass(Unknown Source) ~[na:1.8.0_66]
at java.security.SecureClassLoader.defineClass(Unknown Source) ~[na:1.8.0_66]
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) ~[na:na]
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source) ~[na:na]
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) ~[na:na]
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) ~[na:na]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_66]
at org.apache.commons.logging.LogFactory.createFactory(LogFactory.java:1131) ~[upload.jar:na]
at org.apache.commons.logging.LogFactory$2.run(LogFactory.java:1065) ~[upload.jar:na]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_66]
at org.apache.commons.logging.LogFactory.newFactory(LogFactory.java:1062) ~[upload.jar:na]
at org.apache.commons.logging.LogFactory.getFactory(LogFactory.java:569) ~[upload.jar:na]
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685) ~[upload.jar:na]
at com.amazonaws.AmazonWebServiceClient.<clinit>(AmazonWebServiceClient.java:56) ~[upload.jar:na]
這裏發生的是AWS庫正在嘗試初始化其日誌記錄系統,因此它開始搜索將處理任何內部日誌記錄消息的LogFactory。問題是,它開始在小程序外搜索,通過使對
http://localhost/...myUrl.../commons-logging.properties
GET請求(我發現了這一點,從這裏的文檔:https://commons.apache.org/proper/commons-logging/apidocs/org/apache/commons/logging/package-summary.html)
現在,一個邊注:我security-app-context.xml
文件對Spring包含以下入口點豆,以確保非認證的用戶只能看到登錄頁面:
<beans:bean id="loginUrlAuthenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<beans:constructor-arg value="/loginPage" />
</beans:bean>
這是在這個階段,我的春節,建立更爲醒目的GET請求,並將其重定向到服務器登錄頁面。此重定向最終將發送一個有效的HTML頁面作爲此GET請求的結果。 HTML頁面的第一行是「',日誌框架解析並嘗試使用它來初始化Java類。顯然,一個名爲.class的類不存在,所以我得到了ClassFormatError。
有沒有辦法讓AWS庫可以很好地與這個設置一起玩?理想情況下,不禁用Spring的重定向策略。
也許我錯過了一些東西......但是你真的認爲將aws憑證分發到applet是個好主意嗎? (在客戶機上運行!) – ben75
這是一個公平的觀點,在正常情況下,我會同意。但是,在這種情況下,AWS憑證適用於訪問權限受到嚴格限制的帳戶,並且訪問小程序本身受到我試圖解決的相同登錄系統的保護。 –