我想为我的mule应用程序实现HTTP基本身份验证,该应用程序侦听HTTP并且URI为http://localhost:8082/api/customers
。让我们假设只支持POST和GET。
我尝试以
的方式实现身份验证我想利用Spring身份验证管理器实现此目的。我将身份验证配置如下:
首先我创建了身份验证管理器
<ss:authentication-manager xmlns:ss="http://www.springframework.org/schema/security" alias="authenticationManager">
<ss:authentication-provider>
<ss:user-service id="userService">
<ss:user name="user" password="user" authorities="ROLE_USER" />
<ss:user name="admin" password="admin" authorities="ROLE_ADMIN" />
</ss:user-service>
</ss:authentication-provider>
</ss:authentication-manager>
然后我想拦截网址
<ss:http auto-config="true" realm="mule-realm" use-expressions="true">
<ss:intercept-url pattern="/api/customers" method="GET" access="ROLE_USER"/>
<ss:intercept-url pattern="/api/customers" method="POST" access="ROLE_ADMIN"/>
</ss:http>
最后,我将basic-security-filter
置于HTTP Listener之后,如下所示
<http:listener config-ref="CustomerAPI-httpListenerConfig" path="/api/*" doc:name="HTTP" />
<http:basic-security-filter realm="mule-realm" securityProviders="memory-provider" />
<mule-ss:security-manager xmlns:mule-ss="http://www.mulesoft.org/schema/mule/spring-security" name="muleSecurityManager">
<mule-ss:delegate-security-provider name="memory-provider" delegate-ref="authenticationManager" />
</mule-ss:security-manager>
现在,我所期望的是,来自角色为 ROLE_USER (具有user/user
凭据)的用户的请求只能访问GET以及来自角色为 ROLE_ADMIN (使用admin/admin
凭据)可以访问GET和POST。
但我错了。来自 ROLE_USER 的用户的请求访问POST和GET,这是我从未预料到的。
有谁能以正确的方式指导我达到上述要求?
答案 0 :(得分:3)
您可以通过spring-security设置此示例raml-intro来设置api。在这种情况下,我使用security.properties来管理用户和角色。
正如你在那些lines中看到的那样,我有一个处理安全访问的流程,但没有角色的限制。
为了处理角色,您可以修改代码并添加以下行
<mule-ss:authorization-filter requiredAuthorities="ROLE_ADMIN"/>
您的流程应如下所示:
<flow name="get:/publishers:publishers-config">
<mule-ss:http-security-filter realm="mule-realm"
securityProviders="security-provider"/>
<mule-ss:authorization-filter requiredAuthorities="ROLE_ADMIN"/>
<set-payload
value="[{
 "id" : 1,
 "name" : "DC Comics"
},
{
 "id" : 2,
 "name" : "Marvel Comics"
}]"
doc:name="Set Payload" />
</flow>
答案 1 :(得分:2)
如果您想基于Htttp方法实施授权,可以使用下一个示例:
<ss:authentication-manager xmlns:ss="http://www.springframework.org/schema/security" alias="authenticationManager">
<ss:authentication-provider>
<ss:user-service id="userService">
<ss:user name="user" password="user" authorities="ROLE_USER" />
<ss:user name="admin" password="admin" authorities="ROLE_ADMIN,ROLE_USER" />
</ss:user-service>
</ss:authentication-provider>
</ss:authentication-manager>
{...}
<flow name="testingFlow">
<http:listener config-ref="HTTP_Listener_Configuration2" path="/*" doc:name="HTTP" allowedMethods="GET,POST"/>
<http:basic-security-filter realm="mule-realm"/>
<set-variable variableName="method" value="#[header:INBOUND:http.method]" doc:name="method rest" />
<choice>
<when expression="method.equals('GET')">
<mule-ss:authorization-filter requiredAuthorities="ROLE_USER"/>
</when>
<when expression="method.equals('POST')">
<mule-ss:authorization-filter requiredAuthorities="ROLE_ADMIN"/>
</when>
</choice>
</flow>
请注意,必须将角色ROLE_ADMIN和ROLE_USER分配给用户admin,因为“mule-ss:authorization-filter”不允许使用多个值。