2011-07-29 119 views
3

在我的Web應用程序中,用戶可以更改他們的用戶詳細信息。該頁面的URL是:Spring Security:只允許用戶訪問他們自己的管理頁面

springproject/usermanagement/edituserinfo/4 

其中「4」是用戶標識。

我的安全上下文的樣子:

<security:http auto-config="true" use-expressions="true"> 
    <security:intercept-url pattern="/usermanagement" access="isAuthenticated()" /> 
    <security:intercept-url pattern="/usermanagement/new" access="hasRole('ROLE_ADMIN')" /> 
    <security:intercept-url pattern="/usermanagement/edit/*" access="hasRole('ROLE_ADMIN')" /> 
    <security:intercept-url pattern="/usermanagement/edituserinfo/*" access="isAuthenticated()" /> 
</security:http> 

我怎樣才能限制用戶只能訪問自己的「edituserinfo」頁?例如。與用戶ID用戶1只能訪問: 「springproject/usermanagement/edituserinfo/1」,而不是 「springproject/usermanagement/edituserinfo/4」

+0

你真的需要通過用戶ID的URL ?理想情況下,您的網址應該是'springproject/usermanagement/edituserinfo'。您應該在Java代碼中檢索用戶標識爲SecurityContextHolder.getContext()。getAuthentication()。getPrincipal()'並使用它來加載用戶詳細信息。這將確保用戶只能看到和編輯他們自己的細節,而不能看到和編輯他們自己的細節。 – manish

回答

3

使用上的URL PathVariable,像@RequestMapping("/usermanagement/edituserinfo/{userid}")並在代碼驗證已登錄在用戶的Spring Security上下文原則中(通過SecurityContextHolder.getContext().getAuthentication().getPrincipal())針對userid路徑變量。如果他們不匹配,將用戶彈出,登錄SecurityException,併發送電子郵件給管理員。

相關問題