【发布时间】:2015-11-06 15:13:31
【问题描述】:
我想为我的 mule 应用程序实现 HTTP 基本身份验证,该应用程序侦听 HTTP,URI 是 http://localhost:8082/api/customers。假设只支持 POST 和 GET。
我试图以这样的方式实现身份验证
- 如果用户具有 ROLE_ADMIN 角色,他可以访问 POST 和 GET 端点
- 如果用户只有 ROLE_USER 角色,他只能访问 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>
然后我想到了截取url
<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,这是我从未预料到的。
谁能指导我以正确的方式实现上述要求?
【问题讨论】:
标签: spring authentication mule