From Camel 2.12 onwards its even easier as you can provide the subject in two different ways.
You can send a message to a Camel route with a header of key
ShiroSecurityConstants.SHIRO_SECURITY_TOKEN of the type
org.apache.camel.component.shiro.security.ShiroSecurityToken that contains
the username and password. For example:
ShiroSecurityToken shiroSecurityToken = new ShiroSecurityToken("ringo", "starr"); template.sendBodyAndHeader("direct:secureEndpoint", "Beatle Mania", ShiroSecurityConstants.SHIRO_SECURITY_TOKEN, shiroSecurityToken);
You can also provide the username and password in two different headers as shown below:
Map<String, Object> headers = new HashMap<String, Object>(); headers.put(ShiroSecurityConstants.SHIRO_SECURITY_USERNAME, "ringo"); headers.put(ShiroSecurityConstants.SHIRO_SECURITY_PASSWORD, "starr"); template.sendBodyAndHeaders("direct:secureEndpoint", "Beatle Mania", headers);
When you use the username and password headers, then the ShiroSecurityPolicy in the
Camel route will automatic transform those into a single header with key
ShiroSecurityConstants.SHIRO_SECURITY_TOKEN with the token. Then token is either a
ShiroSecurityToken instance, or a base64 representation as a String (the
latter is when you have set base64=true).