|
[ umpirsky @ 02.10.2008. 22:51 ] @
| Koja je procedura da se omoguci Java apletu pristup fajl sistemu?
Naime, imam ovako nesto:
Code:
public class Crap extends JApplet {
public void init() {
JFileChooser fc = new JFileChooser();
fc.setCurrentDirectory(new File("C:\\"));
int returnVal = fc.showOpenDialog(Crap.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File aFile = fc.getSelectedFile();
String fileName = aFile.getName();
}
}
}
ovo radi iz eclipsa, ali kada pokrenem iz browsera
Code:
java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)
...
Eclipse generise neki java.policy.applet fajl
Code:
/* AUTOMATICALLY GENERATED ON Tue Apr 16 17:20:59 EDT 2002*/
/* DO NOT EDIT */
grant {
permission java.security.AllPermission;
};
znaci, sta treba da uradim da bi podigao ovaj JFileChooser iz browsera? |
[ nemnesic @ 03.10.2008. 04:46 ] @
treba da uradis digitally sign applet
veoma lako ima 1000 tutoriala
�
[ umpirsky @ 03.10.2008. 07:54 ] @
Toga sam se bojao :)
Ali, kad sam malo bolje procitao http://www-personal.umich.edu/...gned-applet/signed-applet.html , video sam da si u pravu, ne izgleda tesko, pokusacu.
Samo vidim da onda moram da ga exportujem u jar, sto naravno nije problem, ali usporava razvoj :P kad bi umeo da napravim ant, bilo bi cool.
BTW, kad napravim aplet koji ima jednu klasu i default package, onda mi radi bez archive="jar", a kad imam paket onda nece...u cemu je fora? I sta je bolje, sa stanovista performansi jar ili class? I zasto ako vec stavljam archive="x.jar" moram i code="x.class", zasto ne moze samo sa jar?
[ Java Beograd @ 06.10.2008. 09:00 ] @
1. Nauči ant. Izuzetno je lak i jednostavan, a uštedeće ti MNOGO, MNOGO vremena. Na savladavanje anta utrošićeš tek par sati.
2. Kad savladaš ant, lakše ćeš da "svariš" i potpisivanje apleta
Što se tiče pitanja oko arhive i putanje:
Hoće da radi i ovako i onako. Ako ti je applet u nekom package-u onda treba da napišeš (na primer)
Code:
class=com.tvojdomen.tvojprojekat.GlavnApplet.class
A pri tome applet treba da bude u tom folderu ! Dakle, da napraviš takvu strukturu foldera.
Zašto jar ? Da korisnik ne bi dovlačio jedu po jednu klasu HTTP protokolom, već da dovuče gomilu klasa (zipovanih) odjenom. I ne samo klasa već i ostalih resursa (slike na primer ili neki drugi fajlovi). Inače, kad se klase već dovuku, onda se preformanse izvođenja ne razlikuju.
[ Dejan Lozanovic @ 06.10.2008. 16:51 ] @
Citat: Java Beograd: 1. Nauči ant. Izuzetno je lak i jednostavan, a uštedeće ti MNOGO, MNOGO vremena. Na savladavanje anta utrošićeš tek par sati.
2. Kad savladaš ant, lakše ćeš da "svariš" i potpisivanje apleta
Što se tiče pitanja oko arhive i putanje:
Hoće da radi i ovako i onako. Ako ti je applet u nekom package-u onda treba da napišeš (na primer)
Code:
class=com.tvojdomen.tvojprojekat.GlavnApplet.class
A pri tome applet treba da bude u tom folderu ! Dakle, da napraviš takvu strukturu foldera.
Zašto jar ? Da korisnik ne bi dovlačio jedu po jednu klasu HTTP protokolom, već da dovuče gomilu klasa (zipovanih) odjenom. I ne samo klasa već i ostalih resursa (slike na primer ili neki drugi fajlovi). Inače, kad se klase već dovuku, onda se preformanse izvođenja ne razlikuju.
ja bi radje preporucio maven. Zbog lakog dodavanja biblioteka i vece automatizacije build procesa
[ umpirsky @ 07.10.2008. 07:17 ] @
@Java Beograd
Potpisao sam ga. Sad mi je jasno zasto jar...i cela priča sa paketima i pakovanjem, hvala.
Naravno da ću se pozabaviti mravom ;)
[ umpirsky @ 08.10.2008. 11:03 ] @
Dobar je mrav, svidja mi se. Napravio sam ovakav build.xml
Code:
<project name="UmpirskyUploader" default="dist" basedir=".">
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="bin"/>
<property name="dist" location="bin"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init" description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile" description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}/release"/>
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
<jar jarfile="${dist}/release/UmpirskyUploader-${DSTAMP}.jar" basedir="${build}"/>
</target>
<!-- Copy static files -->
<copy file="${src}/www/index.html" todir="${dist}/release"/>
<copy file="${src}/www/callback.js" todir="${dist}/release"/>
<!-- Sign jar -->
<signjar jar="${dist}/release/UmpirskyUploader-${DSTAMP}.jar" alias="umpirsky" storepass="*****"/>
<target name="clean" description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
Sve lepo radi, kompajlira, kopira, jaruje....ali nece da potpise jar fajl.
[ Java Beograd @ 08.10.2008. 12:31 ] @
Možda sam nešto prevideo, ali koliko vidim ti ni ne pozivaš potpisivanje.
U project tagu se kaže da treba startovati dist
U dist se kaže da prtehodno treba uraditi compile
U compile se kaže da prethodno treba uraditi init
Ne vidim odakle ti to pozivaš potpisivanje, a koliko vidim ni clean ti ne radi.
[ umpirsky @ 08.10.2008. 12:45 ] @
Pazi, jesam apsolutni početnik...ali ovo kompajliranje definitivno radi, kao i jarovanje, e sad, za čišćenje me za sad i nije briga.
Ovo:
Code:
<signjar jar="${dist}/release/UmpirskyUploader-${DSTAMP}.jar" alias="umpirsky" storepass="*****"/>
bi trebalo da ga potpiše...
Ovako ja to radim ručno:
Code:
keytool -genkey -alias umpirsky
keytool -export -alias umpirsky -rfc -file cert
jarsigner {path}file.jar cert
[ Java Beograd @ 08.10.2008. 14:16 ] @
Ma nije poenta da li te briga ili ne.
ant radi tako da jedna "procedura" poziva drugu. U ovom tvom ant fajlu nigde se ne poziva potpisivanje i clean.
[ umpirsky @ 08.10.2008. 14:42 ] @
Hm...da, da, zato kad pokrenem ant po drugi put ok kaze da neki zip poziva sam sebe..i onda ja obrisem generisani jar i on opet radi.
Kako si ustanovio da ne radi clean?
Ako mozes da na brzinu izmenis build.xml, kako od prilike treba da izgleda...valjda ce mi tada biti jasnije...bio bih ti veoma zahvalan.
[ Java Beograd @ 08.10.2008. 14:58 ] @
Evo ti slikovito kako se odvijaju operacije. Očigledno je da clean neće biti pozvan, a ono oko potpisivanja "visi".
[att_img]
Evo kako bi to trbalo, ali nisam siguran pošto pišem "napamet". Ti proveri da li radi.
Code:
<project name="UmpirskyUploader" default="clean" basedir=".">
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="bin"/>
<property name="dist" location="bin"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init" description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile" description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}/release"/>
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
<jar jarfile="${dist}/release/UmpirskyUploader-${DSTAMP}.jar" basedir="${build}"/>
<!-- Copy static files -->
<copy file="${src}/www/index.html" todir="${dist}/release"/>
<copy file="${src}/www/callback.js" todir="${dist}/release"/>
<!-- DO OVDE SI SVE LEPO SMESTIO NA ODGOVARAJUCE FOLDERE, JOS DA POZOVES JAR-OVANJE TJ. ARHIVIRANJE -->
<!-- KAD NAPRAVI[ JAR ONDA MOZES I DA GA POTPISES-->
<!-- Sign jar -->
<signjar jar="${dist}/release/UmpirskyUploader-${DSTAMP}.jar" alias="umpirsky" storepass="*****"/>
</target>
<target name="clean" depends="dist" description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
[ umpirsky @ 09.10.2008. 07:10 ] @
Hvala puno, sad mi je jasno sa slike....nisam obratio pažnju na default, a nisam izgleda ni dobro razumeo šta je depends...nisam dovoljno čitao.
Sinoć sam probao ovo:
Code:
<project name="UmpirskyUploader" default="dist" basedir=".">
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="bin"/>
<property name="dist" location="release"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init" description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile" description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}"/>
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
<jar jarfile="${dist}/UmpirskyUploader-${DSTAMP}.jar" basedir="${build}"/>
</target>
<!-- Copy static files -->
<copy file="${src}/www/index.html" todir="${dist}"/>
<copy file="${src}/www/callback.js" todir="${dist}"/>
<!-- Sign jar -->
<target name="sign-jar" depends="dist" description="signs jar file">
<signjar jar="${dist}/UmpirskyUploader-${DSTAMP}.jar" alias="umpirsky" storepass="019808454" verbose="true"/>
</target>
<target name="clean" description="clean up" >
<!-- Delete the ${build} directory trees -->
<delete dir="${build}"/>
</target>
</project>
Naravno, potpisivanje nije radilo...sada mi je jasno i zašto.
Hvala još jednom.
[ umpirsky @ 10.10.2008. 09:44 ] @
Ovo sad radi sasvim fino:
Code:
<project name="UmpirskyUploader" default="clean" basedir=".">
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="bin"/>
<property name="dist" location="release"/>
<target name="init">
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init" description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile" description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}"/>
<!-- Put everything in ${build} into the MyProject.jar file -->
<jar jarfile="${dist}/UmpirskyUploader.jar" basedir="${build}"/>
</target>
<!-- Copy static files -->
<copy file="${src}/www/index.html" todir="${dist}"/>
<copy file="${src}/www/callback.js" todir="${dist}"/>
<!-- Sign jar -->
<target name="sign-jar" depends="dist" description="signs jar file">
<signjar jar="${dist}/UmpirskyUploader.jar" alias="umpirsky" storepass="******"/>
</target>
<target name="clean" depends="sign-jar" description="clean up">
<!-- Delete the ${build} directory trees -->
<!-- <delete dir="${build}"/> -->
</target>
</project>
Clean sam iskomentarisao, da mi se eclips ne bi bunio, ali i to radi.
Samo sad imam drugi problem. Ovaj applet mi je potpisan...i radi, ali kad pozovem metod appleta iz javascripta, javlja se :
Code:
uncaught exception: Error calling method on NPObject! [plugin exception: java.security.AccessControlException: access denied (java.io.FilePermission C:\Users\Sale\AppData\Roaming\Microsoft\Windows\Recent read)].
(ovo je iz firebug konzole).
I sad ja guglam da nadjem resenje, i vidm da ima takvih problema http://www.velocityreviews.com...unch-a-signed-java-applet.html
I onda pocinje neka prica o potpisanom javascript kodu, pakovanje javascripta u jar...zna li neko nesto vise o tome?
[ umpirsky @ 10.10.2008. 09:53 ] @
Izgleda mora novi thread koji osluskuje da li je javascrip[t pozvan da se pokrene...to narusava performanse verovatno..a i malo komplikuje implementaciju.
http://www.snowbound.com/tech_tips/g_security_applet_java.html
Probacemo...
[ umpirsky @ 11.10.2008. 00:13 ] @
Metod apleta zaista možete pozvati iz javascripta ovako :
Code:
document.appletName.methodName();
čak i ako je aplet potpisan, ali metod mora da izgleda ovako :
Code:
public void methodName() {
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
// do something
return null;
}
});
}
Jedini problem je što iz nekog meni nepoznatog razloga, pri prvom pozivu kašnjenje je oko 4-5 sekundi, dok je kod svakog narednog momentalan odziv.
Da li neko zna u čemu je problem i kako može biti rešen?
[ umpirsky @ 14.10.2008. 13:25 ] @
Izgleda da je problem performansi izazvan JFileChooser-om. On troši vreme...
Napravio sam browse link na strani, kad se klikne na njega, pozovem metodu apleta koja kreira JFileChooser:
Code:
private ArrayList<File> browseHandler() {
this.fileChooser = new JFileChooser();
// neka inicijalizacija
int action = this.fileChooser.showOpenDialog(this);
// i tako dalje...
}
Dakle, tu se troši vreme. Da bih ovo izbegao, mislio sam da ovaj deo oko kreiranja i inicijalizacije prebacim u init() metodu, međutim, kada sam to učinio, ubrzanje nisam dobio (bar mi se tako čini), ali sam dobio to da ne mogu da selektujem više fajlova od jednom sa "ctrl + a" a kada selektujem sa ctrl + click, dobijem selekciju u text field-u choosera, ali se ne vidi da su ikonice fajlova selektovane.
Interesantno je takođe, da je sve ovo sporo i nestabilno (koči se kad kliknem van JFileChoosera, pozadina se ne repaintuje kad pomeram JFileChooser...) pod win XP, a na visti radi sasvim fino.
[ gajo2 @ 14.10.2008. 14:42 ] @
JFileChooseru treba mnogo vremena da se inicijalizuje, ali posle toga radi bez problema. Ne znam da li postoji neko bolje resenje, pogledaj na googlo mozda je neko napravio neki custom component, mada sumnjam...
[ umpirsky @ 14.10.2008. 14:53 ] @
Samo kad bi mogo da ga inicijalizujem u init(), tu bih uštedeo, ali kao što sam napisao...onda imam druge probleme.
[ gajo2 @ 14.10.2008. 15:02 ] @
Nisam probao, ali mozda bi mogao da prebacis tu inicijalizaciju u neki thread, pa ga pozoves onda kada se i applet inicijalizuje. Pa se nadaj da korisnik nece odmah u prvih 5 sekundi da klikne na Browse (ili sakrij dugme  )
[ umpirsky @ 14.10.2008. 18:49 ] @
Ma probao sam i thread..nista bolje, posle opet na show() izgubi isto vreme :(
[ umpirsky @ 14.10.2008. 19:29 ] @
Jao, počeo je da mi se javlja i problem sa sertifikatom :(
Na mom kompu sve radi dobro, ali kad uploadujem potpisani jar fajl na server dobijam :
Code:
java.security.PrivilegedActionException: java.lang.reflect.InvocationTargetException
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.liveconnect.SecureInvocation$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.liveconnect.SecureInvocation.CallMethod(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
at sun.plugin.liveconnect.PrivilegedCallMethodAction.run(Unknown Source)
... 4 more
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Blue hills.jpg read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkRead(Unknown Source)
at java.io.File.length(Unknown Source)
at sun.awt.shell.ShellFolder.length(Unknown Source)
at umpirsky.UmpirskyUploader.getFiles(UmpirskyUploader.java:126)
... 14 more
Potpisujem ga ovako:
Code:
keytool -genkey -alias umpirsky
...blabla
jarsigner -storepass ****** -signedjar UmpirskyUploader.jar UmpirskyUploader-sig.jar umpirsky
Da li možda treba da još nešto petljam sa ključevima...do sada je ovo šljakalo...čak i na pomenutm serveru. Možda keytool -export -alias umpirsky -rfc -file umpirsky.cer, ali šta posle s ovim fajlm, nisam baš razumeo uputstvo na sun-ovom sajtu?
[ umpirsky @ 16.10.2008. 09:11 ] @
Rešeno. Samo sam u prvoj liniji init() metoda, stavio :
Code:
System. setSecurityManager(null);
Ne razumem kako je ovo pomoglo, ali radi. Ako neko ume da objasni, bio bih zahvalan.. Više informacija na http://java.sun.com/j2se/1.4.2...ager(java.lang.SecurityManager) .
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|