0
我想使用基本認證,並獲得騾流的憑據。騾基本認證
這裏是我的騾子流向:
<http:listener config-ref="httpConfig" path="/*" doc:name="HTTP" allowedMethods="get, post, delete" />
<apikit:router config-ref="api-config" doc:name="APIkit Router" />
<flow name="get:/sourcing/helloworld-secure:api-config">
<flow-ref name="authenticate-ldap" doc:name="authenticate-ldap"/>
</flow>
<flow name="authenticate-ldap">
<logger message="Name: #[message.inboundProperties.get('username')] Password:#[message.inboundProperties['password']] level="INFO"/>
<component class="com.test.AuthTest" doc:name="Java"/>
<logger message="After java: #[flowVars.username] #[flowVars.password]" level="INFO" doc:name="Logger"/>
<json:object-to-json-transformer doc:name="Object to JSON"/>
<data-mapper:transform config-ref="Map_auth_to_ldap_request" doc:name="Map auth to ldap request"/>
</flow>
Java代碼:
public class AuthTest implements Callable {
@Override
public Map<String, String> onCall(MuleEventContext eventContext) throws Exception {
Map<String, String> authMap = new HashMap<String, String>();
final String authorization = eventContext.getMessage().getInboundProperty("authorization");
if (authorization != null && authorization.startsWith("Basic")) {
String base64Credentials = authorization.substring("Basic".length()).trim();
String credentials = new String(Base64.decode(base64Credentials), Charset.forName(Base64.PREFERRED_ENCODING));
if (credentials != null) {
final String[] values = credentials.split(":",2);
eventContext.getMessage().setInvocationProperty("username", values[0]);
eventContext.getMessage().setInvocationProperty("password", values[1]);
authMap.put("username", values[0]);
authMap.put("password", values[1]);
}
}
return authMap;
}
}
運行該應用程序,我使用REST客戶端在Chrome和選擇基本身份驗證,然後給用戶名和密碼。
上面的代碼工作正常。我需要的不是在Java中獲取證書,而是將其放入Map中,我需要在不使用Java代碼的情況下獲取Mule流中的證書。這可能直接在騾流中嗎?
我已經實施了Spring安全工作正常,但在這種情況下,我需要用戶輸入憑據並進一步處理。
正如我在我的問題告知,我能夠做到這一點。 – bekur
我已經修改了答案,以包含您可以在流程中獲取憑據的方式。這不是一種直接的方式,但是你可以在不創建Java類的情況下做到這一點。 –
騾3.8.3有問題的字符串拆分。使用這個: https://forums.mulesoft.com/questions/56799/split-statement.html –
bekur