package me.test.jaas.provider.b; import java.util.PropertyPermission; import me.test.jaas.provider.a.TaskA; /** * 该代码对系统属性"java.version"仅有读取权限。 * 但是如果TaskA提供相应的特权接口,TaskB可以通过该接口按照TaskA的规则行使相应的特权。 */ public class TaskB { private static final String name = "PROVIDER_B"; private static final String value = "BBBBBBBB"; /** * 检查对系统属性"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); } /** * 调用A的非特权模式代码。 */ public void callAWithoutPrivileged() { System.out.println(name + " : /*************调用A(A不使用特权模式)"); TaskA taskA = new TaskA(); taskA.run(); System.out.println(name + " : ****************************/"); } /** * 调用A的特权模式代码。 */ @SuppressWarnings("unchecked") public void callAWithtPrivileged() { System.out.println(name + " : /*************调用A(A使用特权模式)"); final TaskA taskA = new TaskA(); taskA.runInPrivileged(); System.out.println(name + " : ****************************/"); } }