package me.test.jaas.provider.a; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.PropertyPermission; /** * 该代码对系统属性"java.version"既有读取权限,也有写入权限。 */ public class TaskA { private static final String name = "PROVIDER_A"; private static final String value = "AAAAAAAA"; /** * 检查对系统属性"java.version"是否有读写权限。 */ public static void check() { boolean readOk = false; boolean writeOk = false; SecurityManager sm = System.getSecurityManager(); if (sm == null) { readOk = true; writeOk = true; } else { try { sm.checkPermission(new PropertyPermission("java.version", "read")); readOk = true; } catch (Exception e) { } try { sm.checkPermission(new PropertyPermission("java.version", "write")); writeOk = true; } catch (Exception e) { } } String resultStr = "["; resultStr += readOk ? "R" : ""; resultStr += writeOk ? "W" : ""; resultStr += "]"; System.out.println(name + " : property[\"java.version\"] = " + resultStr); } /** * 尝试对系统属性"java.version"先后进行读-写-读的操作。(非特权模式) */ public void run() { System.out.println(name + " : ------------------------"); // 读取 String version = System.getProperty("java.version"); System.out.println(name + " : java.version = " + version); // 写入 boolean success = false; try { System.setProperty("java.version", value); success = true; } catch (Exception e) { } String resultStr = success ? "SUCCESS" : "FAILED"; System.out.println(name + " : setProperty(\"java.version\", \"" + value + "\") = " + resultStr); // 读取 version = System.getProperty("java.version"); System.out.println(name + " : java.version = " + version); } /** * 尝试对系统属性"java.version"先后进行读-写-读的操作。(特权模式) */ @SuppressWarnings("unchecked") public void runInPrivileged() { System.out.println(name + " : ------------------------"); // 读取 String version = System.getProperty("java.version"); System.out.println(name + " : java.version = " + version); // 写入 boolean success = false; try { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { System.setProperty("java.version", value); return null; } }); success = true; } catch (Exception e) { } String resultStr = success ? "SUCCESS" : "FAILED"; System.out.println(name + " : setProperty(\"java.version\", \"" + value + "\") = " + resultStr); // 读取 version = System.getProperty("java.version"); System.out.println(name + " : java.version = " + version); } }