1 21 package org.lobobrowser.html.js; 22 23 import org.mozilla.javascript.*; 24 import java.security.*; 25 26 public class SecurityControllerImpl extends SecurityController { 27 private final java.net.URL url; 28 private final java.security.Policy policy; 29 private final CodeSource codesource; 30 31 public SecurityControllerImpl(java.net.URL url, Policy policy) { 32 this.url = url; 33 this.policy = policy; 34 this.codesource = new CodeSource(this.url, (java.security.cert.Certificate []) null); 35 } 36 37 public Object callWithDomain(Object securityDomain, final Context ctx, final Callable callable, final Scriptable scope, final Scriptable thisObj, final Object [] args) { 38 if(securityDomain == null) { 39 return callable.call(ctx, scope, thisObj, args); 40 } 41 else { 42 PrivilegedAction action = new PrivilegedAction() { 43 public Object run() { 44 return callable.call(ctx, scope, thisObj, args); 45 } 46 }; 47 AccessControlContext acctx = new AccessControlContext(new ProtectionDomain[] { (ProtectionDomain) securityDomain }); 48 return AccessController.doPrivileged(action, acctx); 49 } 50 } 51 52 public GeneratedClassLoader createClassLoader(ClassLoader parent, Object staticDomain) { 53 return new LocalSecureClassLoader(parent); 54 } 55 56 public Object getDynamicSecurityDomain(Object securityDomain) { 57 Policy policy = this.policy; 58 if(policy == null) { 59 return null; 60 } 61 else { 62 PermissionCollection permissions = this.policy.getPermissions(codesource); 63 return new ProtectionDomain(codesource, permissions); 64 } 65 } 66 67 private class LocalSecureClassLoader extends SecureClassLoader implements GeneratedClassLoader { 68 public LocalSecureClassLoader(ClassLoader parent) { 69 super(parent); 70 } 71 72 public Class defineClass(String name, byte[] b) { 73 return this.defineClass(name, b, 0, b.length, codesource); 74 } 75 76 public void linkClass(Class clazz) { 77 super.resolveClass(clazz); 78 } 79 } 80 } 81 | Popular Tags |