【问题标题】:Mule Http basic authentication - set username in variableMule Http 基本身份验证 - 在变量中设置用户名
【发布时间】:2017-06-27 10:24:09
【问题描述】:

我已经为我的 mule flow 应用程序实现了 HTTP 基本身份验证。

它侦听 HTTP,URI 是 http://localhost:8082/login

<flow name="wsGetReport">
    <http:listener config-ref="HTTP_Listener_Configuration" path="${wsPath}" doc:name="HTTP"/>
    <logger level="INFO" message="## received" doc:name="Logger"/>
    <http:basic-security-filter realm="mule-realm"/>
    <flow-ref name="doSubFlow" doc:name="doSubFlow"/>     
    <logger level="INFO" message="## passed security" doc:name="Logger"/>
    <http:static-resource-handler resourceBase="${app.home}/classes" doc:name="HTTP Static Resource Handler" defaultFile="index.html"/>
</flow>

我会检索用户在登录时输入的用户名,并将其显示在 http 静态资源(一个 html 页面)中。

如何存储用于身份验证的用户名?

谢谢。

【问题讨论】:

    标签: mule mule-studio httplistener


    【解决方案1】:

    您可以使用mel 获取基本身份验证的用户和密码,如下所示,并将其存储在一个变量中:-

        <flow name="SpringBasicAuthExample">
           <http:listener config-ref="HTTP_Listener_Configuration" path="/security" doc:name="HTTP"/>
           <logger level="INFO" message="## received" doc:name="Logger"/>
           <http:basic-security-filter realm="mule-realm"/>    
           <set-payload value="#[message.inboundProperties.'Authorization']" doc:name="Set Payload"/>
           <set-payload value="#[message.payloadAs(java.lang.String).substring('Basic'.length()).trim()]" doc:name="Set Payload"/>
           <expression-transformer expression="#[String credentials = new String(org.mule.util.Base64.decode(payload),java.nio.charset.Charset.forName('UTF-8')); String[] values = credentials.split(':',2); flowVars.user= values[0]; flowVars.pass=values[1];]" doc:name="Expression"/>
           <set-payload value="#[['user':flowVars.user,'password':flowVars.pass]]" doc:name="Set Payload"/>
           <parse-template location="index.html" doc:name="Parse Template"/>
           <logger level="INFO" message="## passed security" doc:name="Logger"/>
      </flow>
    </mule>
    

    最后,您可以将 用户名密码 存储在一个变量中,并将该变量传递到一个 html 文件中以显示 用户名动态使用parse-template:- index.html:-

    <html>
    <body>
    <b>UserName: #[flowVars.user]</b>
    </body>
    </html>
    

    请注意您的index.html 应该在资源文件夹中。在这里,一旦您在变量中获得 用户名,您就可以将其存储或传递到您希望的任何地方:)

    【讨论】:

      【解决方案2】:

      看看BasicAuthenticationFilter.extractAndDecodeHeader()。这就是 Spring Framework 的做法。

      【讨论】:

        【解决方案3】:

        您可以通过基本身份验证获取用户名和密码,如下所示:

        <set-session-variable variableName="userInfo" value="#[org.mule.util.StringUtils.split(new String(org.mule.util.Base64.decode(message.inboundProperties.'Authorization'.substring('Basic'.length()).trim()), java.nio.charset.Charset.forName('UTF-8')), ':')]" doc:name="Session Variable"/>
                <logger message="user name = #[sessionVars.userInfo[0]] ***** password= #[sessionVars.userInfo[1]]" level="INFO" doc:name="Logger"/>
        

        【讨论】:

          猜你喜欢
          • 2015-10-01
          • 2016-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-04
          • 1970-01-01
          • 2016-10-31
          • 2013-05-31
          相关资源
          最近更新 更多