Ir para conteúdo
  • 0

[Resolvido] Manipulação de URLClassLoader e ClassLoader, como faço?


nathampa0909

Pergunta

Olá, estou querendo dar uma aprofundada nos meus conhecimentos de Java e estou querendo fazer um sistema de licença bem legal que talvez eu use ou não futuramente, o que eu estou com dúvidas e não consegui achar na internet um tutorial bom é sobre ClassLoader, onde eu gostaria de baixar uma classe da internet, rodar as informações dessa classe e excluir a mesma, mas estou com dificuldades e não consegui fazer o código. Se alguém souber me explicar sobre o assunto e ter um código exemplo eu agradeceria muito!

 

Att, Nathan.

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

Ué, baixa o arquivo .class e usa 'Runtime' pra fazer o PC executar: 

java arquivo-class

Como baixar um arquivo usando Java: http://www.guj.com.br/java/128487-fazer-download-de-arquivo-com-java

Como usar a classe Runtime: http://www.thiagovespa.com.br/blog/2011/04/25/classe-runtime/

 

 

Runtime.getRuntime().exec("java arquivo-class");

 

 

Link para o comentário
Compartilhar em outros sites

Não é necessário baixar o arquivo e verificar.

Faz em PHP.

Salva o IP da maquina que esta tentando acessar no mysql, e quando ela for tentar acessar, verifica o ip dela. Se for o mesmo ip que ta na database, libera.

Se não for, cancela (exit).

E pra ler o código da página faz isso:
 

	private static String getText(String urlloc) {
		try {
			URL url = new URL(urlloc);
			URLConnection openConnection = url.openConnection();
			openConnection.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
			Scanner r = new Scanner(openConnection.getInputStream());
			StringBuilder sb = new StringBuilder();
			while (r.hasNext()) {
				sb.append(r.next());
			}
			r.close();
			return sb.toString();
		} catch (IOException e) {
		}
		return null;
	}

Ai, quando o IP não for o mesmo, tu manda um echo acusando algum erro, ai tu puxa isso ae e verifica. Ex:
 

$ip = "192.155.98.22"; //Aqui é o IP do mysql.
$ipM = "192.168.199.99"; //Aqui é o IP da maquina.
if($ip != $ipM){
echo "Erro0";
exit;
}else{
echo "Sucess";
}

Ai, com o método do getText(String urlloc), tu vê se na página tem Erro0, se tiver é pq não autorizou. Se não tiver, é por que autorizou e sistema feito (+/-) e.e

Ai, vai da tua imaginação fazer os sistemas de checagem.

A base é isso ae!

Link para o comentário
Compartilhar em outros sites

Não é necessário baixar o arquivo e verificar.

Faz em PHP.

Salva o IP da maquina que esta tentando acessar no mysql, e quando ela for tentar acessar, verifica o ip dela. Se for o mesmo ip que ta na database, libera.

Se não for, cancela (exit).

E pra ler o código da página faz isso:

 

	private static String getText(String urlloc) {
		try {
			URL url = new URL(urlloc);
			URLConnection openConnection = url.openConnection();
			openConnection.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
			Scanner r = new Scanner(openConnection.getInputStream());
			StringBuilder sb = new StringBuilder();
			while (r.hasNext()) {
				sb.append(r.next());
			}
			r.close();
			return sb.toString();
		} catch (IOException e) {
		}
		return null;
	}

Ai, quando o IP não for o mesmo, tu manda um echo acusando algum erro, ai tu puxa isso ae e verifica. Ex:

 

$ip = "192.155.98.22"; //Aqui é o IP do mysql.
$ipM = "192.168.199.99"; //Aqui é o IP da maquina.
if($ip != $ipM){
echo "Erro0";
exit;
}else{
echo "Sucess";
}

Ai, com o método do getText(String urlloc), tu vê se na página tem Erro0, se tiver é pq não autorizou. Se não tiver, é por que autorizou e sistema feito (+/-) e.e

Ai, vai da tua imaginação fazer os sistemas de checagem.

A base é isso ae!

Eu estou fazendo isso no meu msdev.cf/auth, porém, fica com mais segurança importar uma classe externa também.

Link para o comentário
Compartilhar em outros sites

O meu conhecimento sobre isso é bem vasto, nunca precisei do mesmo, mas sei um pouco.
 
Você precisa carregar o jar que tem a classe... segue o exemplo que fiz
 
Teste (classe)

package com.outlook.devleeo.teste;

public class Teste 
{
	
	public static void metodo()
	{
		System.out.println("oi");
	}
	
}

Classe para testar

package com.outlook.devleeo.teste;

import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class CLTeste 
{

	public static void main(String[] args) throws Exception
	{
	
		URLClassLoader loader = new URLClassLoader(new URL[] {new URL("http://devleeo.ga/utils/Teste.jar")});//URL DO JAR QUE CONTÉM A CLASSE Teste
		
		Class<?> testeClass = loader.loadClass("com.outlook.devleeo.teste.Teste");//"caminho" da classe
		
		Method testeMethod = testeClass.getDeclaredMethod("metodo");
		
		testeMethod.invoke(null);
		
		loader.close();
	}
}

Resultado da execução
 
3rmmtgR.png


Ué, baixa o arquivo .class e usa 'Runtime' pra fazer o PC executar: 

java arquivo-class

Como baixar um arquivo usando Java: http://www.guj.com.br/java/128487-fazer-download-de-arquivo-com-java

Como usar a classe Runtime: http://www.thiagovespa.com.br/blog/2011/04/25/classe-runtime/

 

 

Runtime.getRuntime().exec("java arquivo-class");

 

 

Isso só vai executar a classe, diferente do classloader, que vai carregar tudo.

Link para o comentário
Compartilhar em outros sites

O meu conhecimento sobre isso é bem vasto, nunca precisei do mesmo, mas sei um pouco.

 

Você precisa carregar o jar que tem a classe... segue o exemplo que fiz

 

Teste (classe)

package com.outlook.devleeo.teste;

public class Teste 
{
	
	public static void metodo()
	{
		System.out.println("oi");
	}
	
}

Classe para testar

package com.outlook.devleeo.teste;

import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class CLTeste 
{

	public static void main(String[] args) throws Exception
	{
	
		URLClassLoader loader = new URLClassLoader(new URL[] {new URL("http://devleeo.ga/utils/Teste.jar")});//URL DO JAR QUE CONTÉM A CLASSE Teste
		
		Class<?> testeClass = loader.loadClass("com.outlook.devleeo.teste.Teste");//"caminho" da classe
		
		Method testeMethod = testeClass.getDeclaredMethod("metodo");
		
		testeMethod.invoke(null);
		
		loader.close();
	}
}

Resultado da execução

 

3rmmtgR.png

Isso só vai executar a classe, diferente do classloader, que vai carregar tudo.

Tem como eu pegar um valor que retornou da classe que eu peguei pelo classloader?

Link para o comentário
Compartilhar em outros sites

valor? como assim?

Tem como carregar a Class Inteira Não? Tipo ali como você fez

Class<?> testeclass = etc;

 

ai Para pegar um Método você utilizou a Method

não teria como fazer algo para ficar Tipo assim

 

Digamos que na Classe que carreguei tem um valor que possa ser retornado, digamos um replace

 

public void String replace(String s)

{

    return (s).replaceAll("&","§");

}

 

ai na Jar a qual eu estou importando a classe, atravez de um comando ficaria assim

 

sender.sendMessage(testeclass.replace("&cUm Textinho ai"));

 

Tlgd, como se a Classe Importada ficasse DENTRO do plugin já(temp), e funcionasse como se fosse um classe existente no Plugin(Classe normal, criada e pá, não importada).

 

Sacou Negro?

Editado por root@mikesantos ~/
Link para o comentário
Compartilhar em outros sites

Tem como carregar a Class Inteira Não? Tipo ali como você fez

Class<?> testeclass = etc;

 

ai Para pegar um Método você utilizou a Method

não teria como fazer algo para ficar Tipo assim

 

Digamos que na Classe que carreguei tem um valor que possa ser retornado, digamos um replace

 

public void String replace(String s)

{

    return (s).replaceAll("&","§");

}

 

ai na Jar a qual eu estou importando a classe, atravez de um comando ficaria assim

 

sender.sendMessage(testeclass.replace("&cUm Textinho ai"));

 

Tlgd, como se a Classe Importada ficasse DENTRO do plugin já(temp), e funcionasse como se fosse um classe existente no Plugin(Classe normal, criada e pá, não importada).

 

Sacou Negro?

Não, que eu saiba não, só com reflection mesmo, ou você pode adicionar ao seu projeto para nao ficar com erro e depois só carregar como eu disse acima, igual o bukkit...

Link para o comentário
Compartilhar em outros sites

Não, que eu saiba não, só com reflection mesmo, ou você pode adicionar ao seu projeto para nao ficar com erro e depois só carregar como eu disse acima, igual o bukkit...

Entra no skype plz, preciso falar com você.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...