Author: chirino
Date: Sat Feb 19 17:40:28 2005
New Revision: 154466
URL: http://svn.apache.org/viewcvs?view=rev&rev=154466
Log:
Implemented the filter method so that if the packet gets sliced or duplicated,
the resulting
packet wiill still carry the Subject context.
Modified:
geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/network/protocol/SubjectCarryingChannel.java
Modified:
geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/network/protocol/SubjectCarryingChannel.java
URL:
http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/network/protocol/SubjectCarryingChannel.java?view=diff&r1=154465&r2=154466
==============================================================================
---
geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/network/protocol/SubjectCarryingChannel.java
(original)
+++
geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/network/protocol/SubjectCarryingChannel.java
Sat Feb 19 17:40:28 2005
@@ -92,6 +92,29 @@
super.write(createPassthroughPacket(packet));
}
+ public class SubjectPacketFilter extends FilterPacket {
+
+ SubjectPacketFilter(Packet packet) {
+ super(packet);
+ }
+
+ public Object narrow(Class target) {
+ if( target == SubjectContext.class ) {
+ return new SubjectContext() {
+ public Subject getSubject() {
+ return remoteSubject;
+ }
+ };
+ }
+ return super.narrow(target);
+ }
+
+ public Packet filter(Packet packet) {
+ return new SubjectPacketFilter(packet);
+ }
+
+ }
+
public void onPacket(Packet packet) {
// Don't take anything to the packet stream if subject reading is not
enabled.
@@ -102,29 +125,15 @@
try {
switch( packet.read() ) {
- case CLEAR_SUBJECT:
- localSubject = null;
+ case CLEAR_SUBJECT:
+ localSubject = null;
return;
- case SET_SUBJECT:
- SubjectId subjectId = extractSubjectId(packet);
- localSubject =
ContextManager.getRegisteredSubject(subjectId);
+ case SET_SUBJECT:
+ SubjectId subjectId = extractSubjectId(packet);
+ localSubject =
ContextManager.getRegisteredSubject(subjectId);
return;
- case PASSTHROUGH:
- super.onPacket(new FilterPacket(packet){
- public Object narrow(Class target) {
- if( target == SubjectContext.class ) {
- return new SubjectContext() {
- public Subject getSubject() {
- return remoteSubject;
- }
- };
- }
- return super.narrow(target);
- }
- public Packet filter(Packet packet) {
- return packet;
- }
- });
+ case PASSTHROUGH:
+ super.onPacket( new SubjectPacketFilter(packet) );
}
} catch (IOException e) {
super.onPacketError(e);
@@ -139,7 +148,7 @@
DataInputStream is = new DataInputStream(new
PacketInputStream(packet));
Long id = new Long(is.readLong());
byte hash[]= new byte[ is.readInt() ];
- return new SubjectId(id, hash);
+ return new SubjectId(id, hash);
}
private Packet createClearSubjectPackt() {