Zugriffsschutz: protected und packages

Status
Nicht offen für weitere Antworten.

Leroy42

Top Contributor
Ich habe gerade in einem anderen Forum ein Post gesehen,
der bei mir Verständnisschwierigkeiten auslöst.
TK1985 hat gesagt.:
Ich hab mal ein paar Fragen zu den Zugriffsmodifier unter Java und ihrer Anwendung.
Wenn ich die Daten eines Objekts verändern will, dann mach ich das ja nicht durch direkten Zugriff auf die Atribute sondern über Methoden, die dann wiederum die Atribute des Objekts beeinflussen. Solche Atribute die ich gegen "unerlaubten" Zugriff schützen will definiere ich ja als private, oder!? Wenn ich jetzt aber eine Klasse vererben will dann kann ich in der Unterklasse nicht mehr auf die private-Elemente der Vaterklasse zugreifen, was ja aber oft sehr wünschenswert ist. Muss ich in dem Fall dann den den Modifier protected wählen? Ich hab jetzt gelesen, dass protected Atribute auch für andere Klassen im gleichen Packet sichtbar sind, was ja bedeuten würde das ich den Effekt des Zugriffschutzes nur außerhalb eines Packets erziele. Ist das ein wirkliches Problem oder ist es in der Praxis eh immer der Fall das sich fremde Klassen in einem anderen Packet befinden und ich so den Zugriffsschutz habe.
Ich hoffe mir kann da jemand weiterhelfen.

MfG
Thomas

Dazu jetzt meine Frage:

TK1985 hat gesagt.:
Ich hab jetzt gelesen, dass protected Atribute auch für andere Klassen im gleichen Packet sichtbar sind
:shock: Das wußte ich noch gar nicht :shock:
Ich hab's gleich ausprobiert und es stimmt tatsächlich.

TK1985 hat gesagt.:
Ist das ein wirkliches Problem oder ist es in der Praxis eh immer der Fall das sich fremde Klassen in einem anderen Packet befinden und ich so den Zugriffsschutz habe.
Gute Frage!
Ich würde sagen, daß dem Ersteller eines packages natürlich die
Erlaubnis gegeben werden kann, in seinem package auf protected
Elemente zuzugreifen.

Die Frage ist jetzt, ob ich mich in ein vorhandenes Fremd-Package einschleusen kann. In der Art:

Code:
// ganz.geheimes.package.Spion.java
package ganz.geheimes.package;

class Spion {
  public static IrgendeineClass1 getStaticMember1() {return PackageClass1.Geheim;}
  public static IrgendeineClass2 getStaticMember1() {return PackageClass2.Geheim;}
  }
}
Anders gefragt: Was macht der ClassLoader wenn er in mehreren Jar-Files ein
bestimmtes Package findet? Mischt er dann die Klassen der Packages?
 
Ich habe die Ursprungsfrage ja gar nicht gestellt, weil ich bisher mit den
Feinheiten der Zugriffsrechte nichts zu tun hatte. Mir ist auch klar, wo ich
diese Information bekommen kann (Java Language Specification).

Was ich meine ist, ob ich z.B. ein package desselben Namens eines bereits
existierenden erstellen kann, dieses dann in ein Jar packe, das Jar in mein
classpath mit aufnehme und so von einer Klasses meines geklauten
Packages auf protected-Komponenten des eigentlichen Originalpackages
Zugriff erlangen kann, auch wenn diese in Klassen liegen die final sind; von
denen ich also nicht ableiten darf?

Das wäre dann doch eine Umgehung der Grundidee des Sicherheitskonzepts, oder?
 
Ich denke, wenn diese JARS über denselben ClassLoader geladen werden, dürfte der Angriff funktionieren. Das "final" schützt nur gegen Ableitung (allerdings 100%, da finale Klassen anders behandelt werden), nicht gegen Zugriff.

Dass man seine Packages nicht "java" oder "javax" nennen kann, wird ja wohl einen Grund haben :wink:
 
Wenns danach geht kannst Du das Jar doch einfach entpacken und Deine Klasse dem fremden Package hinzufügen. Ich sehe nur keinen Sinn darin. :roll:
 
byto hat gesagt.:
Wenns danach geht kannst Du das Jar doch einfach entpacken und Deine Klasse dem fremden Package hinzufügen. Ich sehe nur keinen Sinn darin. :roll:
Ich kann es ja nur entpacken, wenn ich Zugriff auf den ausführenden Rechner habe.

Aber diese Aussage
Beni hat gesagt.:
Dass man seine Packages nicht "java" oder "javax" nennen kann, wird ja wohl einen Grund haben :wink:
zerstreut meine Bedenken 😀

Daß ich ein Package nicht so nennen darf, wußte ich noch nicht. Aber dadurch wird zumindest
verhindert, daß ich mich in Systemklassen einschleusen kann. Damit ist meine
Frage dann beantwortet. 😎

P.S. Bin ich jetzt blöd oder warum finde ich das Thema abgehakt-Häkchen nicht :shock:
Ich finde nur das Thema beobachten-Häkchen, was ja nicht funktionieren soll 🙁
 
Leroy42 hat gesagt.:
P.S. Bin ich jetzt blöd oder warum finde ich das Thema abgehakt-Häkchen nicht :shock:
Ich finde nur das Thema beobachten-Häkchen, was ja nicht funktionieren soll 🙁
es gibt gar kein Thema beobachten-Häkchen :autsch:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben