Problema con Applet y firma.
Buenas a tod@s, estoy intentando hacer una prueba de un Applet pero no puedo porque en Java 8 la seguridad es muy fuerte con los applets.
Como les comento, he creado uno de prueba y no puedo ejecutarlo porque me aparece el siguiente mensaje:
Lo he firmado con las herramientas que trae el propio JDK (keytool y jarsigner) pero ni así he podido, al parecer las aplicaciones autofirmadas no se ejecutan... ¿Entonces para que están esas herramientas? >_<. He leído que se puede usar OpenSSL pero no entiendo los ejemplos u_u. También he leído sobre AC, pero al parecer son de certificados de paga, y yo soy pobre já.
Encontré que también se puede agregar una excepción en la configuración de Java, lo hice, agregue la ruta del HTML (aunque el propio Java me dice que no son seguros los protocolos FILES y HTTP). Y no "funka", jajaja, nunca me había metido con los applets, pensé que eran simples pero no, son jodidamente molestos... Esa info la encontre en esta pagina: https://www.java.com/es/download/help/java_blocked.xml
Este es mi html:
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div>TODO write content</div>
<applet code="macaddress.Ventana" archive="MacAddress.jar" width="400" height="400">
<param name="permissions" value="all-permissions"/>
</applet>
</body>
</html>
Alguien que se apiade de mi y me eche una mano, sinceramente no se me ocurre nada. Es la primera vez que trabajo con Applets porque no me quise animar con los de JavaFX jajaja... estoy pollo pues... Cualquier comentario es bueno!!! :)
Saludos y gracias por leer.
- Inicie sesión o regístrese para enviar comentarios
Error de novato...
Jajajajajajaja, reinicie el navegador y el applet funciona -_- pero solo porque esta agregado a la lista de excepciones y aun así me apareció un mensaje de advertencia. No pensé, y no tome captura de la ventana u_u pero el chiste es que ahora si funciona el applet, con maña, pero funciona.
Aunque aun me gustaría saber si existe una forma correcta de hacer un applet.
Saludos.
No
La mejor forma de hacer un applet es NO hacer un applet.
Si realmente necesitas que ejecuten los usuarios una aplicación de escritorio que sea accesible desde un navegador, mejor usa java web start.
Jajaja pobres Applets, ya nadie los quiere.
¿Si? Es que necesito crear una aplicación que capture las direcciones MAC de los usuarios (aunque aun no se si se pueda, ya que lo intente en C# y me devolvía la MAC del servidor), según yo, para mas rápido y simple pensé en usar Applets.
Entiendo, hice una búsqueda mas o menos rápida, y encontré estos sitios:
https://netbeans.org/kb/73/java/javase-jws.html
http://docs.oracle.com/javase/tutorial/deployment/webstart/
http://examples.javacodegeeks.com/java-basics/web-start/java-web-start-g...
¿Cual me podrían recomendar para crear un buen proyecto? Me agrada el primero y el segundo, ¿Que opinan?
Gracias y saludos.
Y en si que seria lo que
Y en si que seria lo que quieres lograr?
http://stackoverflow.com/questions/839973/how-to-get-a-clients-mac-addre...
Perdón por la demora...
Perdón por haber tardado en responder, básicamente lo que quiero hacer es obtener la dirección física del cliente, (ahora mediante jnlp). En tu enlace utilizan Servlets, y dicen que se puede obtener la dirección MAC pero utilizando ARP y solo si esta lo suficientemente cerca, en un concentrador o en un switch, pero la aplicación que me piden va a pasar por una infraestructura de red que desconozco D: y no se si me vayan a dar esa información (Es parte de mis practicas, me pusieron a hacer otras cosas XD). Pero utilizando un jnpl ¿Será posible? Digo, según el objetivo de esta especificación es obtener acceso a propiedades de la maquina cliente. Pero como no he tenido tiempo para probarlo recurro a su conocimiento y experiencia para que me ayuden.
Saludos.
Suponiendo que estés
Suponiendo que estés familiarizado con NetBeans, ¿ya viste la guía que aparece en https://netbeans.org/kb/docs/java/javase-deploy.html#javaws ?
Adicionalmente, tal vez el siguiente código puede serte de utilidad:
while (e.hasMoreElements()) {
NetworkInterface ni = e.nextElement();
if (ni.isUp()) {
byte[] address = ni.getHardwareAddress();
if (address != null && address.length != 0) {
StringJoiner joiner = new StringJoiner("-");
for (byte b : address) {
joiner.add(String.format("%02X", b));
}
System.out.println(joiner.toString());
}
}
}
~~~
Muchas gracias, por la
Muchas gracias, por la respuesta, si, estoy familiarizado con NetBeans, y aunque no lo estuviera es trabajo de un Ingeniero adaptarse. Actualmente no puedo intentarlo por cuestiones de tiempo y otros trabajos, veré si mañana lo logro y les aviso.
Saludos y gracias por responder.
Le sufro mucho con el JWS >_>
He seguido el primer enlace que coloque, en el que netbeans te guia, he podido crear el jnlp, se lanza en el navegador (firefox) de manera local perfectamente pero al momento de ejecutarse da error, y note que en la parte de Ubicacion me coloca el nombre del fichero jar junto con el jnlp.
Este es el contenido del archivo jnlp:
<information>
<title>Testing</title>
<vendor>JoseManuel</vendor>
<homepage href=""/>
<description>Testing</description>
<description kind="short">Testing</description>
</information>
<update check="always"/>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.8+"/>
<jar href="Testing.jar" main="true"/>
</resources>
<application-desc main-class="testing.Testing"/>
</jnlp>
La excepcion que me lanza es la siguiente:
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at com.sun.deploy.security.DeployManifestChecker.verifyCodebaseEx(Unknown Source)
at com.sun.deploy.security.DeployManifestChecker.verifyCodebase(Unknown Source)
at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
at com.sun.javaws.Launcher.prepareResources(Unknown Source)
at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main.access$000(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Bug en NetBeans
Parece ser un bug de NetBeans. Hace poco probé con NetBeans 8 el tutorial que te mencioné en un post paralelo. No obstante, no tuvo el comportamiento que mencionas.
Re: Bug en NetBeans
Estoy utilizando la versión 8.0.1 de NetBeans. Realizo los pasos al pie de la letra. El bug del que mencionas ya lo había leído, pero según entendí no era un bug del IDE sino de javaws, y dicen (@Tomas Zezula) que solo con actualizar el JDK/JRE debería funcionar.
Tengo el JDK 1.8.0_25 y JRE 1.8.0_25
¿Alguna recomendación? ¿Debería buscar las versiones que indican en el Tutorial? ¿O lo debería hacer a mano?
...
¿Y ya probaste eliminando el atributo
codebase
ejecutando directamente el archivo jnlp? Para esto, el jar de tu aplicación debe estar en mismo directorio del jnlp. Esto es sólo para que veas si se ejecuta bien.Idealmente, el
codebase
debe ser una ruta HTTPS y el JAR debe estar firmado con un certificado de una autoridad certificadora de confianza.Más detalles al respecto en https://docs.oracle.com/javase/tutorial/deployment/webstart/deploying.html
...
El archivo jnlp lo ejecuto hasta desde la consola, el error es el mismo. Si elimino el elemento codebase de la etiqueta sigue pasando el mismo error. Ya se que deben estar firmados por una autoridad de confianza, pero si ese fuera el caso no debería mandarme un error como en el caso de los applets (leer el inicio del post) ?
He visto que algunos utilizan Apache tomcat, lo intentare de esa manera para ver si funciona.
Saludos.
Pues qué cosa más
Pues qué cosa más extraña...
Yo tengo la misma versión de NetBeans y de Java:
P.D.: No olvides contarnos cómo te fue con Tomcat.
Ni modo, estoy en deprecated...
No tuve suerte D: y no quedo mas remedio que regresar al applet. En Tomcat monte el jnlp pero siguió con el mismo error. Monte el applet y funciono como si nada -_-, eso si, auto firmado, y añadido a la lista de excepciones.
Probaste con localhost
Probaste con localhost
Te sugiero una prueba.
Publica tu código en un directorio de tomcat como si fuera una página web estática
Cambia las rutas a localhost algo similar a esto
.
.
.
<resources>
<j2se version="1.8+"/>
<jar href="Testing.jar" main="true"/>
</resources>
* Nota Testing.jar lo buscaría en este directorio /Testing
En windows revisa en panel de control / java.
Habilita el log e identifica donde se está descargando la cache
Revisa si está descargando tu jar
"La mejor forma de hacer un applet es NO hacer un applet."
hahahaha maestro! tienes toda la razón. De hecho yo aprendí la lección algo tarde, cuando estaba creando mi página web tuve tantos dolores de cabeza con el java applet que desistí. Yo no soy tan paciente y tampoco tengo los conocimientos que tienen ustedes así que desistí y con tantas ofertas de páginas web gratis sin tanta necesidad de programar y de ser un experto hehehe
Olvidé mencionarte que en la
Oye, José Manuel, olvidé mencionarte que en la página de mkyong.com hay un ejemplo para obtener la dirección MAC que puede serte de utilidad. ¡Por si sirve de algo!
~~~
Saracristina, la cualidad mas
Saracristina, la cualidad mas importante de un buen programador es la paciencia, y en cuanto a los conocimientos nadie nace sabiendo, pero para tener buenos conocimientos se necesita estudiar y estudiar mucho, sino cumples con esas cualidades, entonces esta profesión no es para ti :)
Ya esta implementado, a la primera oportunidad se va.
Gracias a todos por los comentarios, @paranoid_android el applet ya esta en marcha, en cuanto tenga oportunidad lo haré en JNLP.
En cuanto al ejemplo @jpaul, a mi me pidieron obtener las interfaces de red. Yo tome un ejemplo y lo adapte un poco (de una de las tantas paginas de Oracle) y me gusta mas como queda ;)
El código es mas o menos así por si a alguien le interesa;
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author JoseManuel
*/
public class EliminameDespues {
public static void main(String args[]) {
getMac();
}
static void getMac() {
try {
Enumeration<NetworkInterface> lista = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface ni : Collections.list(lista)) {
if (ni.getHardwareAddress() != null && !ni.isVirtual()) {
System.out.println("Nombre: "+ ni.getDisplayName());
System.out.println("MAC: " +convertToHex(ni.getHardwareAddress()).toUpperCase());
}
}
} catch (SocketException ex) {
Logger.getLogger(EliminameDespues.class.getName()).log(Level.SEVERE, null, ex);
}
}
static String convertToHex(byte [] ni) {
StringBuilder sb = new StringBuilder(18);
for (byte b : ni) {
if (sb.length() > 0) {
sb.append(':');
}
sb.append(String.format("%02x", b));
}
return sb.toString();
}
}
El resultado es el siguiente:
MAC: 28:E3:47:45:DD:BD
Nombre: Realtek PCIe FE Family Controller
MAC: 28:D2:44:55:AC:17
Nombre: Adaptador virtual directo Wi-Fi de Microsoft
MAC: 1A:E3:47:45:DD:BD
Nombre: Dispositivo Bluetooth (Red de área personal)
MAC: 28:E3:47:46:3B:E1
Nombre: Teredo Tunneling Pseudo-Interface
MAC: 00:00:00:00:00:00:00:E0
Nombre: Adaptador ISATAP de Microsoft #9
MAC: 00:00:00:00:00:00:00:E0
Se ve mas bonito verdad? :)
Saludos y gracias de nuevo por los consejos.
¡Excelente!
¡Excelente! Sólo dos pequeñas observaciones si no te importa:
También puedes iterar una enumeración con
while
:while (lista.hasMoreElements()) {
NetworkInterface ni = lista.nextElement();
...
}
Si utilizas
'X'
mayúscula, no necesitarástoUpperCase()
:¡Por si sirve de algo!