You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by we...@apache.org on 2005/11/17 15:17:27 UTC
svn commit: r345243 - in
/webservices/wss4j/trunk/src/org/apache/ws/security: handler/WSHandler.java
handler/WSHandlerConstants.java message/token/Timestamp.java
processor/TimestampProcessor.java
Author: werner
Date: Thu Nov 17 06:17:19 2005
New Revision: 345243
URL: http://svn.apache.org/viewcvs?rev=345243&view=rev
Log:
Some fixes to make timestamp handling more compliant
to WSS specification (optional fields, exeption only
if timestampStrict=true)
Modified:
webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandler.java
webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandlerConstants.java
webservices/wss4j/trunk/src/org/apache/ws/security/message/token/Timestamp.java
webservices/wss4j/trunk/src/org/apache/ws/security/processor/TimestampProcessor.java
Modified: webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandler.java
URL: http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandler.java?rev=345243&r1=345242&r2=345243&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandler.java (original)
+++ webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandler.java Thu Nov 17 06:17:19 2005
@@ -219,6 +219,7 @@
WSSConfig wssConfig = WSSConfig.getNewInstance();
wssConfig
.setEnableSignatureConfirmation(decodeEnableSignatureConfirmation(reqData));
+ wssConfig.setTimeStampStrict(decodeTimestampStrict(reqData));
reqData.setWssConfig(wssConfig);
if ((doAction & WSConstants.SIGN) == WSConstants.SIGN) {
@@ -527,6 +528,22 @@
throw new WSSecurityException(
"WSHandler: illegal precisionInMilliSeconds parameter");
}
+
+ protected boolean decodeTimestampStrict(RequestData reqData)
+ throws WSSecurityException {
+ boolean precisionInMilliSeconds = true;
+ String value = getString(WSHandlerConstants.TIMESTAMP_STRICT,
+ reqData.getMsgContext());
+
+ if (value == null) {return true;}
+
+ if ("0".equals(value) || "false".equals(value)) {return false;}
+ if ("1".equals(value) || "true".equals(value)) {return true;}
+
+ throw new WSSecurityException(
+ "WSHandler: illegal timestampStrict parameter");
+ }
+
/**
* Get a password to construct a UsernameToken or sign a message.
Modified: webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandlerConstants.java
URL: http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandlerConstants.java?rev=345243&r1=345242&r2=345243&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandlerConstants.java (original)
+++ webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandlerConstants.java Thu Nov 17 06:17:19 2005
@@ -660,7 +660,17 @@
* Should timestamps have precision in milliseconds
*/
public static final String TIMESTAMP_PRECISION = "precisionInMilliseconds";
-
+
+ /**
+ * Set the value of this parameter to true to enable strict timestamp
+ * handling.
+ *
+ * Strict Timestamp handling: throw an exception if a Timestamp contains
+ * an <code>Expires</code> element and the semantics of the request are
+ * expired, i.e. the current time at the receiver is past the expires time.
+ */
+ public static final String TIMESTAMP_STRICT = "timestampStrict";
+
/**
* Define the parameter values to set the key identifier types. These are:
* <ul>
Modified: webservices/wss4j/trunk/src/org/apache/ws/security/message/token/Timestamp.java
URL: http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/message/token/Timestamp.java?rev=345243&r1=345242&r2=345243&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/org/apache/ws/security/message/token/Timestamp.java (original)
+++ webservices/wss4j/trunk/src/org/apache/ws/security/message/token/Timestamp.java Thu Nov 17 06:17:19 2005
@@ -65,11 +65,8 @@
customElements = new Vector();
- String strCreated = "";
- String strExpires = "";
-
- created = Calendar.getInstance();
- expires = Calendar.getInstance();
+ String strCreated = null;
+ String strExpires = null;
for (Node currentChild = element.getFirstChild();
currentChild != null;
@@ -77,10 +74,22 @@
if (currentChild instanceof Element) {
if (WSConstants.CREATED_LN.equals(currentChild.getLocalName()) &&
WSConstants.WSU_NS.equals(currentChild.getNamespaceURI())) {
- strCreated = ((Text) ((Element) currentChild).getFirstChild()).getData();
+ if (strCreated == null) {
+ strCreated = ((Text) ((Element) currentChild).getFirstChild()).getData();
+ }
+ else {
+ throw new WSSecurityException(WSSecurityException.INVALID_SECURITY,
+ "invalidTimestamp");
+ }
} else if (WSConstants.EXPIRES_LN.equals(currentChild.getLocalName()) &&
WSConstants.WSU_NS.equals(currentChild.getNamespaceURI())) {
- strExpires = ((Text) ((Element) currentChild).getFirstChild()).getData();
+ if (strExpires == null) {
+ strExpires = ((Text) ((Element) currentChild).getFirstChild()).getData();
+ }
+ else {
+ throw new WSSecurityException(WSSecurityException.INVALID_SECURITY,
+ "invalidTimestamp");
+ }
} else {
customElements.add((Element) currentChild);
}
@@ -90,8 +99,14 @@
DateFormat zulu = new XmlSchemaDateFormat();;
try {
- created.setTime(zulu.parse(strCreated));
- expires.setTime(zulu.parse(strExpires));
+ if (strCreated != null) {
+ created = Calendar.getInstance();
+ created.setTime(zulu.parse(strCreated));
+ }
+ if (strExpires != null) {
+ expires = Calendar.getInstance();
+ expires.setTime(zulu.parse(strExpires));
+ }
} catch (ParseException e) {
throw new WSSecurityException(WSSecurityException.INVALID_SECURITY,
"invalidTimestamp",
Modified: webservices/wss4j/trunk/src/org/apache/ws/security/processor/TimestampProcessor.java
URL: http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/processor/TimestampProcessor.java?rev=345243&r1=345242&r2=345243&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/org/apache/ws/security/processor/TimestampProcessor.java (original)
+++ webservices/wss4j/trunk/src/org/apache/ws/security/processor/TimestampProcessor.java Thu Nov 17 06:17:19 2005
@@ -52,22 +52,33 @@
}
public void handleTimestamp(Timestamp timestamp) throws WSSecurityException {
- if (log.isDebugEnabled()) {
- log.debug("Preparing to verify the timestamp");
+ if (log.isDebugEnabled()) {
+ log.debug("Preparing to verify the timestamp");
- DateFormat zulu = new XmlSchemaDateFormat();
+ DateFormat zulu = new XmlSchemaDateFormat();
- log.debug("Current time: " + zulu.format(Calendar.getInstance().getTime()));
- log.debug("Timestamp created: " + zulu.format(timestamp.getCreated().getTime()));
- log.debug("Timestamp expires: " + zulu.format(timestamp.getExpires().getTime()));
- }
+ log.debug("Current time: "
+ + zulu.format(Calendar.getInstance().getTime()));
+ if (timestamp.getCreated() != null) {
+ log.debug("Timestamp created: "
+ + zulu.format(timestamp.getCreated().getTime()));
+ }
+ if (timestamp.getExpires() != null) {
+ log.debug("Timestamp expires: "
+ + zulu.format(timestamp.getExpires().getTime()));
+ }
+ }
- // Validate whether the security semantics have expired
- Calendar rightNow = Calendar.getInstance();
- if (timestamp.getExpires().before(rightNow)) {
- throw new WSSecurityException(WSSecurityException.INVALID_SECURITY, "invalidTimestamp", new Object[]{"The security semantics of message have expired"});
- }
+ // Validate whether the security semantics have expired
+ Calendar rightNow = Calendar.getInstance();
+ Calendar exp = timestamp.getExpires();
+ if (exp != null && exp.before(rightNow)) {
+ throw new WSSecurityException(
+ WSSecurityException.INVALID_SECURITY,
+ "invalidTimestamp",
+ new Object[] { "The security semantics of message have expired" });
+ }
- return;
- }
+ return;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: wss4j-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: wss4j-dev-help@ws.apache.org