簡體   English   中英

Spring security 4 @PreAuthorize(hasAuthority())訪問被拒絕

[英]Spring security 4 @PreAuthorize(hasAuthority()) access denied

我試圖將Spring Security 3 @Secured(“admin”)注釋轉換為Spring Security 4兼容的方式。

這是我的usersService.java

@PreAuthorize("hasAuthority('admin')")
public List<User> getAllUsers() {
    return usersDao.getAllUsers();
}

然后在security-context.xml我有:

<security:intercept-url pattern="/admin" access="permitAll" />
...
<security:global-method-security pre-post-annotations="enabled" />

getAllUsers()LoginController.java調用

@RequestMapping("/admin")
public String showAdmin(Model model) {
    List<User> users = usersService.getAllUsers();

    model.addAttribute("users", users);

    return "admin";
}

在mySql數據庫中,有兩個表,用戶和權限。 authorities有2列,用戶名和權限。 administrator有權限admin

現在,如果我試圖訪問/admin ,我將被重定向到/login ,但在我與administrator /login后,我仍然得到“訪問被拒絕”。

我想我一定錯過了一些非常基本的東西,但由於我是Spring的新手,我無法弄明白。 任何幫助,將不勝感激。 謝謝。

更新:我嘗試將注釋更改為@PreAuthorize(“hasRole('ROLE_ADMIN')”)我還將mySql中的“權限”列從“admin”更改為“ROLE_ADMIN”,但它仍然給了我403.我做了沒有這多少信心,因為這個錯誤之前,我不得不改變hasRole('admin')securityContext.xmlhasAuthority('admin')

盡管已經很晚了

hasRole(...)為內容設置前綴 - 默認值為ROLE_

hasAuthority(...)檢查內容沒有前綴,即只是純內容

試試這個@PreAuthorize("hasRole('ROLE_ADMIN')")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM