exposing Java private fields with reflection
This commit is contained in:
25
classes/private/pt-br/AcessaPrivado.java
Normal file
25
classes/private/pt-br/AcessaPrivado.java
Normal file
@@ -0,0 +1,25 @@
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
public class AcessaPrivado {
|
||||
|
||||
public static void main(String[] args) {
|
||||
ObjetoSecreto oSecreto = new ObjetoSecreto("senha super secreta");
|
||||
Field campoPrivado = null;
|
||||
try {
|
||||
campoPrivado = ObjetoSecreto.class.getDeclaredField("escondido");
|
||||
}
|
||||
catch (NoSuchFieldException e) {
|
||||
System.err.println(e);
|
||||
System.exit(1);
|
||||
}
|
||||
campoPrivado.setAccessible(true); // arrombamos a porta
|
||||
try {
|
||||
String tavaEscondido = (String) campoPrivado.get(oSecreto);
|
||||
System.out.println("oSecreto.escondido = " + tavaEscondido);
|
||||
}
|
||||
catch (IllegalAccessException e) {
|
||||
// esta exceção nao acontece porque fizemos setAcessible(true)
|
||||
System.err.println(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
9
classes/private/pt-br/ObjetoSecreto.java
Normal file
9
classes/private/pt-br/ObjetoSecreto.java
Normal file
@@ -0,0 +1,9 @@
|
||||
public class ObjetoSecreto {
|
||||
|
||||
private String escondido = "";
|
||||
private String oculto = "dado ultra secreto";
|
||||
|
||||
public ObjetoSecreto(String texto) {
|
||||
this.escondido = texto;
|
||||
}
|
||||
}
|
||||
6
classes/private/pt-br/acessapriv.py
Normal file
6
classes/private/pt-br/acessapriv.py
Normal file
@@ -0,0 +1,6 @@
|
||||
import ObjetoSecreto
|
||||
|
||||
oSecreto = ObjetoSecreto('senha super secreta')
|
||||
campoPrivado = ObjetoSecreto.getDeclaredField('escondido')
|
||||
campoPrivado.setAccessible(True) # arrombamos a porta
|
||||
print 'oSecreto.escondido =', campoPrivado.get(oSecreto)
|
||||
11
classes/private/pt-br/listapriv.py
Normal file
11
classes/private/pt-br/listapriv.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from java.lang.reflect import Modifier
|
||||
import ObjetoSecreto
|
||||
|
||||
oSecreto = ObjetoSecreto('senha super secreta')
|
||||
campos = ObjetoSecreto.getDeclaredFields()
|
||||
for campo in campos:
|
||||
# so campos privados!
|
||||
if Modifier.isPrivate(campo.getModifiers()):
|
||||
print campo
|
||||
campo.setAccessible(True) # arrombamos a porta
|
||||
print '\t', campo.getName(), '=', campo.get(oSecreto)
|
||||
Reference in New Issue
Block a user