2017-08-10 1 views
0

IWie Zugang von geschützten Elementen verhindern

package java.util; 

public class xyz { 
    void method(){ 
     ArrayList<String> al = new ArrayList<>(); 
     al.elementData = new Object[10]; 
     System.out.println(al.elementData); 
    } 

    public static void main(String[] args) { 
     xyz z = new xyz(); 
     System.out.println("hello"); 
     z.method(); 
    } 
} 

eine Klasse, wenn ich versuche, es zu laufen ich eine Ausnahme wie erhalten unter

objc[6598]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined. 
Error: A JNI error has occurred, please check your installation and try again 
Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.util 
    at java.lang.ClassLoader.preDefineClass(ClassLoader.java:662) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:761) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495) 

an Unternehmen FOO Angenommen, wir entwickeln und ein Glas ausgeliefert Datei namens foo.jar an Clients. Jetzt können die Clients auf geschützte Member in com.foo.pack.TestClass zugreifen, indem sie sie einfach in classpath hinzufügen und package com.foo.pack; in einer Klasse deklarieren, wie im obigen Beispiel xyz.class Ich kann auf elementData von ArrayList.java zugreifen.

Meine Frage ist, wie man diesen Zugang oder die Nutzung oder Sichtbarkeit der geschützten Mitglieder der Firma FOO verhindert.

+1

Willkommen bei Java-Programmierung. Sie können den Zugriff auf geschützte Mitglieder nicht verhindern. Nur private verhindert den Zugriff und das funktioniert nicht für das, was Sie wollen. – DwB

+0

Ein Ansatz, den ich sehe, ist es, sie nicht zu ermöglichen, die Unternehmensklassen über den Classloader des Client/Exploiters/Benutzers zu laden. Sie können den Code programmieren und kompilieren, aber sie können ihn niemals ausführen, da sie die Klassen nicht laden können. Aber die Frage ist, wie man diesen Ansatz implementiert! – Pushparaj

Antwort

-1

Durch Reflektion können Sie auf private Mitglieder zugreifen und diese sogar ändern. Und das ist sehr üblich (Überprüfen Sie einfach die @Autowired Annotation für Abhängigkeitsinjektion).

Ich bin nicht sicher, was Sie erreichen möchten, aber wenn Sie inverse Engineering von Ihren Clients verhindern möchten, versuchen Sie, Ihren Code mit einem Tool zu verschleiern.

0

Schließen Sie die Pakete im Manifest ab und signieren Sie die JAR-Datei.

+0

Wenn Sie unterschreiben, können Sie sie nicht laden – Pushparaj

Verwandte Themen