Created
May 17, 2013 22:16
-
-
Save greenlaw110/5602348 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class LoggingSecurityManager extends SecurityManager { | |
private AccessControlContext ctx; | |
private Properties properties = new Properties; | |
private Set missingProperties = new HashSet(); | |
public LoggingSecurityManager() { | |
properties.add( | |
new FilePermission(System.get("java.io.tmpdir") + "/-", "read,write,delete")); | |
// maybe... | |
properties.add( | |
new FilePermission(System.get("user.home") + "/-", "read,write,delete")); | |
addSystemPropertyPermissions(); | |
addSecurityPermissions(); | |
addClassPathPermissions(); | |
addOtherPropertyPermissions(); | |
permissions.add(new RuntimePermission("accessClassInPackage.sun.reflect")); | |
permissions.add(new RuntimePermission("accessClassInPackage.sun.jdbc.odbc")); | |
permissions.add(new RuntimePermission("accessClassInPackage.sun.security.provider")); | |
permissions.add(new SocketPermission("localhost", "resolve")); | |
permissions.add(new NetPermission("getProxySelector")); | |
ctx = new AccessControlContext(new ProtectionDomain[] { | |
new ProtectionDomain(null, permissions) | |
}); | |
} | |
/** | |
* Add read-only permission to read system properties. | |
* We may want to filter this list to remove sensitive information | |
*/ | |
public void addSystemPropertyPermissions() { | |
for (Object key : Collections.list(System.getProperties().keys())) { | |
permissions.add(new PropertyPermission((String) key, "read")); | |
} | |
} | |
/** | |
* Add read-only permissions for initializing security. | |
*/ | |
public void addSecurityPermissions() { | |
permissions.add(new SecurityPermission("getPolicy")); | |
permissions.add(new SecurityPermission("getProperty.random.source")); | |
permissions.add(new SecurityPermission("getProperty.securerandom.source")); | |
for (int i = 1; i < 10; i++) { // configurable limit? | |
permissions.add(new SecurityPermission("getProperty.security.provider." + i)); | |
} | |
String s = Security.getProperty("securerandom.source"); | |
if ((s != null) && s.startsWith("file:/")) { | |
permissions.add(new FilePermission(s.substring(5), "read")); | |
} | |
// should have been covered already but wasn't.... | |
permissions.add(new FilePermission("/dev/random", "read")); | |
} | |
/** | |
* Add read-only permissions for everything on classpath. | |
*/ | |
public void addClassPathPermissions() { | |
permissions.add(new FilePermission(String.format("%/lib/-", | |
System.getProperty("java.home")), "read")); | |
// add standard class path. | |
String pathSep = System.getProperty("path.separator"); | |
for (String entry : System.getProperty("java.class.path").split(pathSep)) { | |
File f = new File(entry); | |
if (f.isFile()) { | |
permissions.add(new FilePermission(entry, "read")); | |
} else if (f.isDirectory()) { | |
permissions.add(new FilePermission(String.format("%s/-", entry), "read")); | |
} // or could be neither fish nor fowl | |
} | |
// add endorsed extensions. | |
for (String dir : System.getProperty("java.ext.dirs").split(pathSep)) { | |
permissions.add(new FilePermission(String.format("%s/-", dir), "read")); | |
} | |
} | |
/** | |
* Add other standard properties. | |
*/ | |
public void addOtherPropertyPermissions() { | |
permissions.add(new PropertyPermission("jdbc.drivers", "read")); | |
permissions.add(new PropertyPermission("java.security.egd", "read")); | |
permissions.add(new PropertyPermission("socksProxyHost", "read")); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Coming from http://stackoverflow.com/questions/3817330/noclassdeffounderror-when-creating-objects-under-securitymanager