Added MessageHeaders and MessageBuilder. Messages are now immutable (including header maps).

This commit is contained in:
Mark Fisher
2008-07-17 22:58:56 +00:00
parent b9ea75ea98
commit 2c95306f63
91 changed files with 1154 additions and 1083 deletions

View File

@@ -17,6 +17,7 @@
package org.springframework.integration.security;
import org.springframework.integration.message.Message;
import org.springframework.integration.message.MessageBuilder;
import org.springframework.security.context.SecurityContext;
/**
@@ -28,11 +29,12 @@ public class SecurityContextUtils {
public static final String SECURITY_CONTEXT_HEADER_ATTRIBUTE = "SPRING_SECURITY_CONTEXT";
public static SecurityContext getSecurityContextFromHeader(Message<?> message) {
return (SecurityContext) message.getHeader().getAttribute(SECURITY_CONTEXT_HEADER_ATTRIBUTE);
return (SecurityContext) message.getHeaders().get(SECURITY_CONTEXT_HEADER_ATTRIBUTE);
}
public static void setSecurityContextHeader(SecurityContext sctx, Message<?> message) {
message.getHeader().setAttribute(SECURITY_CONTEXT_HEADER_ATTRIBUTE, sctx);
public static Message<?> setSecurityContextHeader(SecurityContext sctx, Message<?> message) {
return MessageBuilder.fromMessage(message)
.setHeader(SECURITY_CONTEXT_HEADER_ATTRIBUTE, sctx).build();
}
}

View File

@@ -39,18 +39,18 @@ public class SecurityContextPropagatingChannelInterceptor extends ChannelInterce
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
this.setSecurityContextAttribute(message);
return message;
return this.createSecurityContextMessageIfPossible(message);
}
protected void setSecurityContextAttribute(Message<?> message) {
protected Message<?> createSecurityContextMessageIfPossible(Message<?> message) {
SecurityContext securityContext = SecurityContextHolder.getContext();
if (securityContext.getAuthentication() != null) {
SecurityContextUtils.setSecurityContextHeader(securityContext, message);
message = SecurityContextUtils.setSecurityContextHeader(securityContext, message);
}
else if (logger.isInfoEnabled()) {
logger.info("No security context found");
}
return message;
}
}