Added MessageHeaders and MessageBuilder. Messages are now immutable (including header maps).
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user