Wie Class.getMethod () ausgelöst wird, löst eine SecurityException aus

8

Ich habe eine Hilfsmethode, um die Getter-Methode eines Objekts für ein bestimmtes Feld zu finden (mit Reflektion):

%Vor%

Ich möchte einen Komponententest schreiben, der die SecurityException Szenario, aber wie kann ich getMethod eine SecurityException auslösen?

Das Javadoc gibt an, dass getMethod die SecurityException

auslöst
  

Wenn ein Sicherheitsmanager s vorhanden ist und einer der folgenden Punkte   Bedingungen erfüllt ist:

     
  • Aufruf von s.checkMemberAccess (this, Member.PUBLIC) verweigert den Zugriff auf die Methode

  •   
  • Der Klassenlader des Aufrufers ist nicht derselbe oder ein Vorgänger des Klassenladeprogramms für die aktuelle Klasse und der Aufruf von   s.checkPackageAccess () verweigert den Zugriff auf das Paket dieser Klasse

  •   

Ich würde es vorziehen, die Ausnahme normal auszulösen, anstatt auf ein spöttisches Framework zurückzugreifen.

    
James Bassett 20.02.2012, 20:37
quelle

2 Antworten

11
%Vor%

Denken Sie daran, System.setSecurityManager(null) in einem finally -Block aufzurufen, um den ursprünglichen Zustand wiederherzustellen.

    
Bozho 20.02.2012, 20:55
quelle
0

Was dies in einer normalen Einstellung verursacht, gibt es sehr wenige Fälle, wo dies passieren kann.

Nicht öffentliche Methoden führen zu NoSuchMethodException , weil getMethod spezifisch nur nach öffentlichen Methoden sucht. getDeclaredMethod findet die Methode, erlaubt aber die Rückgabe von privaten / geschützten Methoden.

Der einzige wirkliche Weg, dies zu tun, ist, wie die Javadocs sagen, ein separates Paket, das durch den Sicherheitsmanager geschützt ist. Ich vermute, dass dies nur mit unsignierten Applets oder ähnlichen Berechtigungen möglich ist. (Ich bin selbst nie darauf gestoßen, also bin ich mir nicht ganz sicher)

Am besten erzwingen Sie, dass die Ausnahme für bestimmte Methoden ausgelöst wird, indem Sie den Sicherheitsmanager außer Kraft setzen.

    
xthexder 20.02.2012 21:04
quelle

Tags und Links