Author: coheigea
Date: Wed Jan 4 11:59:42 2012
New Revision: 1227128
URL: http://svn.apache.org/viewvc?rev=1227128&view=rev
Log:
[WSS-332] - Make the Spnego Client and Service Actions pluggable on
SpnegoTokenContext
Added:
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/DefaultSpnegoClientAction.java
- copied, changed from r1226749,
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoClientAction.java
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/DefaultSpnegoServiceAction.java
- copied, changed from r1226749,
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoServiceAction.java
Modified:
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoClientAction.java
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoServiceAction.java
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoTokenContext.java
Copied:
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/DefaultSpnegoClientAction.java
(from r1226749,
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoClientAction.java)
URL:
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/DefaultSpnegoClientAction.java?p2=webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/DefaultSpnegoClientAction.java&p1=webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoClientAction.java&r1=1226749&r2=1227128&rev=1227128&view=diff
==============================================================================
---
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoClientAction.java
(original)
+++
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/DefaultSpnegoClientAction.java
Wed Jan 4 11:59:42 2012
@@ -19,8 +19,6 @@
package org.apache.ws.security.spnego;
-import java.security.PrivilegedAction;
-
import org.ietf.jgss.GSSContext;
import org.ietf.jgss.GSSException;
import org.ietf.jgss.GSSManager;
@@ -31,18 +29,14 @@ import org.ietf.jgss.Oid;
* This class represents a PrivilegedAction implementation to obtain a
(SPNEGO) service ticket from a
* Kerberos Key Distribution Center.
*/
-public class SpnegoClientAction implements PrivilegedAction<byte[]> {
+public class DefaultSpnegoClientAction implements SpnegoClientAction {
private static org.apache.commons.logging.Log log =
- org.apache.commons.logging.LogFactory.getLog(SpnegoClientAction.class);
+
org.apache.commons.logging.LogFactory.getLog(DefaultSpnegoClientAction.class);
private String serviceName;
private GSSContext secContext;
private boolean mutualAuth;
- public SpnegoClientAction(String serviceName) {
- this.serviceName = serviceName;
- }
-
/**
* Whether to enable mutual authentication or not.
*/
@@ -50,18 +44,26 @@ public class SpnegoClientAction implemen
mutualAuth = mutualAuthentication;
}
+ /**
+ * The Service Name
+ */
+ public void setServiceName(String serviceName) {
+ this.serviceName = serviceName;
+ }
+
+ /**
+ * Obtain a service ticket
+ */
public byte[] run() {
try {
- if (secContext == null) {
- GSSManager gssManager = GSSManager.getInstance();
- Oid oid = new Oid("1.3.6.1.5.5.2");
-
- GSSName gssService = gssManager.createName(serviceName,
GSSName.NT_HOSTBASED_SERVICE);
- secContext = gssManager.createContext(gssService, oid, null,
GSSContext.DEFAULT_LIFETIME);
-
- secContext.requestMutualAuth(mutualAuth);
- secContext.requestCredDeleg(Boolean.FALSE);
- }
+ GSSManager gssManager = GSSManager.getInstance();
+ Oid oid = new Oid("1.3.6.1.5.5.2");
+
+ GSSName gssService = gssManager.createName(serviceName,
GSSName.NT_HOSTBASED_SERVICE);
+ secContext = gssManager.createContext(gssService, oid, null,
GSSContext.DEFAULT_LIFETIME);
+
+ secContext.requestMutualAuth(mutualAuth);
+ secContext.requestCredDeleg(Boolean.FALSE);
byte[] token = new byte[0];
return secContext.initSecContext(token, 0, token.length);
@@ -74,6 +76,9 @@ public class SpnegoClientAction implemen
return null;
}
+ /**
+ * Get the GSSContext that was created after a service ticket was obtained
+ */
public GSSContext getContext() {
return secContext;
}
Copied:
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/DefaultSpnegoServiceAction.java
(from r1226749,
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoServiceAction.java)
URL:
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/DefaultSpnegoServiceAction.java?p2=webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/DefaultSpnegoServiceAction.java&p1=webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoServiceAction.java&r1=1226749&r2=1227128&rev=1227128&view=diff
==============================================================================
---
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoServiceAction.java
(original)
+++
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/DefaultSpnegoServiceAction.java
Wed Jan 4 11:59:42 2012
@@ -19,8 +19,6 @@
package org.apache.ws.security.spnego;
-import java.security.PrivilegedAction;
-
import org.ietf.jgss.GSSContext;
import org.ietf.jgss.GSSException;
import org.ietf.jgss.GSSManager;
@@ -28,31 +26,42 @@ import org.ietf.jgss.GSSName;
import org.ietf.jgss.Oid;
/**
- * This class represents a PrivilegedAction implementation to validate a
received (SPNEGO) ticket to a KDC.
+ * This class represents a PrivilegedAction implementation to validate a
received (SPNEGO) ticket
+ * to a KDC.
*/
-public class SpnegoServiceAction implements PrivilegedAction<byte[]> {
+public class DefaultSpnegoServiceAction implements SpnegoServiceAction {
private static org.apache.commons.logging.Log log =
-
org.apache.commons.logging.LogFactory.getLog(SpnegoServiceAction.class);
+
org.apache.commons.logging.LogFactory.getLog(DefaultSpnegoServiceAction.class);
private byte[] ticket;
private String serviceName;
private GSSContext secContext;
- public SpnegoServiceAction(byte[] ticket, String serviceName) {
+ /**
+ * Set the ticket to validate
+ */
+ public void setTicket(byte[] ticket) {
this.ticket = ticket;
+ }
+
+ /**
+ * The Service Name
+ */
+ public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
+ /**
+ * Validate a service ticket
+ */
public byte[] run() {
try {
- if (secContext == null) {
- GSSManager gssManager = GSSManager.getInstance();
- Oid oid = new Oid("1.3.6.1.5.5.2");
-
- GSSName gssService = gssManager.createName(serviceName,
GSSName.NT_HOSTBASED_SERVICE);
- secContext = gssManager.createContext(gssService, oid, null,
GSSContext.DEFAULT_LIFETIME);
- }
-
+ GSSManager gssManager = GSSManager.getInstance();
+ Oid oid = new Oid("1.3.6.1.5.5.2");
+
+ GSSName gssService = gssManager.createName(serviceName,
GSSName.NT_HOSTBASED_SERVICE);
+ secContext = gssManager.createContext(gssService, oid, null,
GSSContext.DEFAULT_LIFETIME);
+
return secContext.acceptSecContext(ticket, 0, ticket.length);
} catch (GSSException e) {
if (log.isDebugEnabled()) {
@@ -63,6 +72,9 @@ public class SpnegoServiceAction impleme
return null;
}
+ /**
+ * Get the GSSContext that was created after a service ticket was obtained
+ */
public GSSContext getContext() {
return secContext;
}
Modified:
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoClientAction.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoClientAction.java?rev=1227128&r1=1227127&r2=1227128&view=diff
==============================================================================
---
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoClientAction.java
(original)
+++
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoClientAction.java
Wed Jan 4 11:59:42 2012
@@ -22,60 +22,31 @@ package org.apache.ws.security.spnego;
import java.security.PrivilegedAction;
import org.ietf.jgss.GSSContext;
-import org.ietf.jgss.GSSException;
-import org.ietf.jgss.GSSManager;
-import org.ietf.jgss.GSSName;
-import org.ietf.jgss.Oid;
/**
- * This class represents a PrivilegedAction implementation to obtain a
(SPNEGO) service ticket from a
- * Kerberos Key Distribution Center.
+ * This interface represents a PrivilegedAction implementation to obtain a
(SPNEGO) service ticket
+ * from a Kerberos Key Distribution Center.
*/
-public class SpnegoClientAction implements PrivilegedAction<byte[]> {
- private static org.apache.commons.logging.Log log =
- org.apache.commons.logging.LogFactory.getLog(SpnegoClientAction.class);
-
- private String serviceName;
- private GSSContext secContext;
- private boolean mutualAuth;
-
- public SpnegoClientAction(String serviceName) {
- this.serviceName = serviceName;
- }
+public interface SpnegoClientAction extends PrivilegedAction<byte[]> {
/**
* Whether to enable mutual authentication or not.
*/
- public void setMutualAuth(boolean mutualAuthentication) {
- mutualAuth = mutualAuthentication;
- }
+ public void setMutualAuth(boolean mutualAuthentication);
- public byte[] run() {
- try {
- if (secContext == null) {
- GSSManager gssManager = GSSManager.getInstance();
- Oid oid = new Oid("1.3.6.1.5.5.2");
-
- GSSName gssService = gssManager.createName(serviceName,
GSSName.NT_HOSTBASED_SERVICE);
- secContext = gssManager.createContext(gssService, oid, null,
GSSContext.DEFAULT_LIFETIME);
-
- secContext.requestMutualAuth(mutualAuth);
- secContext.requestCredDeleg(Boolean.FALSE);
- }
-
- byte[] token = new byte[0];
- return secContext.initSecContext(token, 0, token.length);
- } catch (GSSException e) {
- if (log.isDebugEnabled()) {
- log.debug("Error in obtaining a Kerberos token", e);
- }
- }
+ /**
+ * The Service Name
+ */
+ public void setServiceName(String serviceName);
- return null;
- }
+ /**
+ * Obtain a service ticket
+ */
+ public byte[] run();
- public GSSContext getContext() {
- return secContext;
- }
+ /**
+ * Get the GSSContext that was created after a service ticket was obtained
+ */
+ public GSSContext getContext();
}
Modified:
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoServiceAction.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoServiceAction.java?rev=1227128&r1=1227127&r2=1227128&view=diff
==============================================================================
---
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoServiceAction.java
(original)
+++
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoServiceAction.java
Wed Jan 4 11:59:42 2012
@@ -22,49 +22,31 @@ package org.apache.ws.security.spnego;
import java.security.PrivilegedAction;
import org.ietf.jgss.GSSContext;
-import org.ietf.jgss.GSSException;
-import org.ietf.jgss.GSSManager;
-import org.ietf.jgss.GSSName;
-import org.ietf.jgss.Oid;
/**
- * This class represents a PrivilegedAction implementation to validate a
received (SPNEGO) ticket to a KDC.
+ * This interface represents a PrivilegedAction implementation to validate a
received (SPNEGO)
+ * ticket to a KDC.
*/
-public class SpnegoServiceAction implements PrivilegedAction<byte[]> {
- private static org.apache.commons.logging.Log log =
-
org.apache.commons.logging.LogFactory.getLog(SpnegoServiceAction.class);
+public interface SpnegoServiceAction extends PrivilegedAction<byte[]> {
- private byte[] ticket;
- private String serviceName;
- private GSSContext secContext;
+ /**
+ * Set the ticket to validate
+ */
+ public void setTicket(byte[] ticket);
- public SpnegoServiceAction(byte[] ticket, String serviceName) {
- this.ticket = ticket;
- this.serviceName = serviceName;
- }
+ /**
+ * The Service Name
+ */
+ public void setServiceName(String serviceName);
- public byte[] run() {
- try {
- if (secContext == null) {
- GSSManager gssManager = GSSManager.getInstance();
- Oid oid = new Oid("1.3.6.1.5.5.2");
-
- GSSName gssService = gssManager.createName(serviceName,
GSSName.NT_HOSTBASED_SERVICE);
- secContext = gssManager.createContext(gssService, oid, null,
GSSContext.DEFAULT_LIFETIME);
- }
-
- return secContext.acceptSecContext(ticket, 0, ticket.length);
- } catch (GSSException e) {
- if (log.isDebugEnabled()) {
- log.debug("Error in obtaining a Kerberos token", e);
- }
- }
-
- return null;
- }
+ /**
+ * Validate a service ticket
+ */
+ public byte[] run();
- public GSSContext getContext() {
- return secContext;
- }
+ /**
+ * Get the GSSContext that was created after a service ticket was obtained
+ */
+ public GSSContext getContext();
}
Modified:
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoTokenContext.java
URL:
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoTokenContext.java?rev=1227128&r1=1227127&r2=1227128&view=diff
==============================================================================
---
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoTokenContext.java
(original)
+++
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/spnego/SpnegoTokenContext.java
Wed Jan 4 11:59:42 2012
@@ -43,6 +43,8 @@ public class SpnegoTokenContext {
private GSSContext secContext;
private byte[] token;
private boolean mutualAuth;
+ private SpnegoClientAction clientAction = new DefaultSpnegoClientAction();
+ private SpnegoServiceAction serviceAction = new
DefaultSpnegoServiceAction();
/**
* Retrieve a service ticket from a KDC using the Kerberos JAAS module,
and set it in this
@@ -91,16 +93,16 @@ public class SpnegoTokenContext {
}
// Get the service ticket
- SpnegoClientAction action = new SpnegoClientAction(serviceName);
- action.setMutualAuth(mutualAuth);
- token = (byte[])Subject.doAs(clientSubject, action);
+ clientAction.setServiceName(serviceName);
+ clientAction.setMutualAuth(mutualAuth);
+ token = (byte[])Subject.doAs(clientSubject, clientAction);
if (token == null) {
throw new WSSecurityException(
WSSecurityException.FAILURE, "kerberosServiceTicketError"
);
}
- secContext = action.getContext();
+ secContext = clientAction.getContext();
if (LOG.isDebugEnabled()) {
LOG.debug("Successfully retrieved a service ticket");
}
@@ -160,10 +162,11 @@ public class SpnegoTokenContext {
}
// Validate the ticket
- SpnegoServiceAction action = new SpnegoServiceAction(ticket, service);
- token = (byte[])Subject.doAs(subject, action);
+ serviceAction.setTicket(ticket);
+ serviceAction.setServiceName(service);
+ token = (byte[])Subject.doAs(subject, serviceAction);
- secContext = action.getContext();
+ secContext = serviceAction.getContext();
if (LOG.isDebugEnabled()) {
LOG.debug("Successfully validated a service ticket");
}
@@ -228,6 +231,20 @@ public class SpnegoTokenContext {
}
}
+ /**
+ * Set a custom SpnegoClientAction implementation to use
+ */
+ public void setSpnegoClientAction(SpnegoClientAction spnegoClientAction) {
+ this.clientAction = spnegoClientAction;
+ }
+
+ /**
+ * Set a custom SpnegoServiceAction implementation to use
+ */
+ public void setSpnegoServiceAction(SpnegoServiceAction
spnegoServiceAction) {
+ this.serviceAction = spnegoServiceAction;
+ }
+
public void clear() {
token = null;
mutualAuth = false;