2016-10-24 14 views
6

अक्षम करता हूं मैं इस प्रश्न के बारे में स्टैक ओवरफ्लो पर बहुत सारे प्रश्न पढ़ रहा हूं लेकिन मेरी समस्या के समाधान या उत्तर को छोड़ने से नहीं निकल सकता। यदि पहले से ही कोई है तो मैं आभारी रहूंगा यदि कोई संकेत दे ...जावा सुरक्षा प्रबंधक पूरी तरह से प्रतिबिंब

मेरी समस्या/प्रश्न यह है कि भरोसेमंद कोड के लिए पूरी तरह से प्रतिबिंब को अक्षम करना संभव है? getDeclaredMethods() जैसे कार्य (test.java देखें)। मुझे पहले से ही एक जावा सुरक्षा प्रबंधक मिला है जो कोड अपवाद/पढ़ने/लिखने की कोशिश करता है, तो सुरक्षा अपवाद फेंकता है। ...

यदि यह संभव है, तो क्या कोई मुझे दिखा सकता है कि कैसे?

ब्रूनो

test.java

TestClass cls = new TestClass(); 
Class c = cls.getClass(); 

// returns the array of Method objects 
Method[] m = c.getDeclaredMethods(); 
for(int i = 0; i < m.length; i++) { 
    System.out.println("method = " + m[i].toString()); 
} 

उत्तर

4

तो मैं checkPermission के साथ सीधे नहीं समस्या हल (: तो फिर तुम कि क्या फोन करने वाले प्रतिबिंब के लिए अनुमति है तय करने के लिए किया है। मेरा कामकाज यह जांचना है कि java.lang.reflect पैकेज का उपयोग किया गया है या नहीं।

@Override 
public void checkPackageAccess(String pkg){ 

    // don't allow the use of the reflection package 
    if(pkg.equals("java.lang.reflect")){ 
     throw new SecurityException("Reflection is not allowed!"); 
    } 
} 
3

अपने SecurityManager का विस्तार करें और यह ReflectPermission और RuntimePermission के लिए जाँच की है।)

@Override 
public void checkPermission(Permission perm) { 
    if (perm instanceof ReflectPermission) { 
    // called for Method.setAccessible(true) 
    // determine whether caller is permitted using getClassContext() 
    } 
    if (perm instanceof RuntimePermission) { 
    if (perm.implies(new RuntimePermission("accessDeclaredMembers"))) { 
     // called for Class.getDeclardFields() 
     System.out.println("getDeclaredFields() called"); 
    } 
} 
+0

मैं अपने कोड की नकल की और कहा कि एक 'नया SecurityException (...) फेंक 'लेकिन अपवाद नहीं है ... समारोह भी नहीं बुलाया जाता है ... – Bruno

+0

हाँ, यह कहा जाता है नहीं कर रहा है 'getDeclaredMethods()' के लिए, लेकिन यदि आप 'Method.setAccessible (true) 'के माध्यम से निजी/संरक्षित विधियों तक पहुंच बनाना चाहते हैं, तो' सुरक्षा प्रबंधक 'कहा जाता है। – Stefan

+0

मैंने 'getDeclardXYZ()' के लिए चेक के लिए answear अद्यतन किया। आशा करता हूँ की ये काम करेगा। – Stefan

संबंधित मुद्दे