Skip to content

Commit 9da8390

Browse files
committed
updated Java/Jython private field examples
1 parent 1d48cdb commit 9da8390

File tree

8 files changed

+26
-18
lines changed

8 files changed

+26
-18
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ __pycache__/
55
# C extensions
66
*.so
77

8+
# Java
9+
*.class
10+
811
# Distribution / packaging
912
.Python
1013
env/

classes/private/Confidential.class

-360 Bytes
Binary file not shown.

classes/private/Confidential.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ public class Confidential {
44
private String hidden = "burn after reading";
55

66
public Confidential(String text) {
7-
this.secret = text;
7+
this.secret = text.toUpperCase();
88
}
99
}

classes/private/Expose.class

-1.22 KB
Binary file not shown.

classes/private/Expose.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
public class Expose {
44

55
public static void main(String[] args) {
6-
Confidential message = new Confidential("text you shoudn't see");
7-
Field privateField = null;
6+
Confidential message = new Confidential("top secret text");
7+
Field secretField = null;
88
try {
9-
privateField = Confidential.class.getDeclaredField("secret");
9+
secretField = Confidential.class.getDeclaredField("secret");
1010
}
1111
catch (NoSuchFieldException e) {
1212
System.err.println(e);
1313
System.exit(1);
1414
}
15-
privateField.setAccessible(true); // break the lock!
15+
secretField.setAccessible(true); // break the lock!
1616
try {
17-
String wasHidden = (String) privateField.get(message);
17+
String wasHidden = (String) secretField.get(message);
1818
System.out.println("message.secret = " + wasHidden);
1919
}
2020
catch (IllegalAccessException e) {

classes/private/expose.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Confidential
22

3-
message = Confidential("text you shoudn't see")
4-
private_field = Confidential.getDeclaredField('secret')
5-
private_field.setAccessible(True) # break the lock!
6-
print 'message.secret =', private_field.get(message)
3+
message = Confidential('top secret text')
4+
secret_field = Confidential.getDeclaredField('secret')
5+
secret_field.setAccessible(True) # break the lock!
6+
print 'message.secret =', secret_field.get(message)

classes/private/leakprivate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from java.lang.reflect import Modifier
22
import Confidential
33

4-
message = Confidential('never expose this')
4+
message = Confidential('top secret text')
55
fields = Confidential.getDeclaredFields()
66
for field in fields:
77
# list private fields only

classes/private/no_respect.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
# In the Jython registry:
2-
# python.security.respectJavaAccessibility = false
3-
# Setting this to false will allow Jython to provide access to
4-
# non-public fields, methods, and constructors of Java objects.
1+
2+
"""
3+
In the Jython registry file there is this line:
4+
5+
python.security.respectJavaAccessibility = true
6+
7+
Set this to false and Jython provides access to non-public
8+
fields, methods, and constructors of Java objects.
9+
"""
510

611
import Confidential
712

8-
message = Confidential("text you shoudn't see")
13+
message = Confidential('top secret text')
914
for name in dir(message):
1015
attr = getattr(message, name)
11-
if not callable(attr): # ignore methods
12-
print name, '=', attr
16+
if not callable(attr): # non-methods only
17+
print name + '\t=', attr

0 commit comments

Comments
 (0)