我想爲我的mule應用程序實現HTTP基本身份驗證,它在HTTP上偵聽,URI是http://localhost:8082/api/customers
。讓我們假設只支持POST和GET。Mule HTTP基本身份驗證和攔截url
我想以這樣的方式
- 如果用戶有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偵聽器後,像下面
<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>
的
現在,我所期望的是,請求fr om角色爲ROLE_USER(具有user/user
憑據)的用戶只能訪問GET,而來自角色爲的用戶的請求ROLE_ADMIN(具有admin/admin
憑據)可以同時訪問GET和POST。
但我錯了。來自角色爲ROLE_USER的用戶的請求同時訪問POST和GET,這是我從未想到的。
任何人都可以請指導我以正確的方式來達到上述要求嗎?
我試過你的答案。但是在部署過程中出現錯誤:'cvc-complex-type.2.4。a:從元素'mule-ss:authorization-filter'開始找到無效的內容。 「{」http://www.mulesoft.org/schema/mule/core":annotations}'之一是預期的。「我從這個錯誤中得到的理解是我們不能在裏面有'mule-ss:authorization-filter'元素'騾子-SS:HTTP的安全filter'。如果我錯了,你能糾正我嗎? –
對不起,我已經更新了我的答案。現在,它的工作。 –