@PreAuthorize 權限控制的原理


@PreAuthorize是SpringSecurity提供的權限安全認證注解。是在進入方法前進行權限驗證,@PreAuthorize 聲明這個方法所需要的權限表達式,例如:@PreAuthorize("hasAuthority('sys:dept:delete')")。

1.添加依賴
<!-- oauth -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
</dependency>

2. 方法前增加注解@PreAuthorize

@PreAuthorize("@ss.hasRole('sys:user:add')")

public void addUser(User user) {
System.out.println("addUser................" + user);

}

上面的注解標識在進入方法addUser之前,進行權限認證。是否擁有user的add權限。其中ss表示hasRole方法所在的類。如:

@Service("ss")
public class PermissionService
{
/**
* 驗證用戶是否具備某權限
*/
public boolean hasPermi(String permission){
...
return true;
}}

3. 參數驗證

  /**

    * 限制只能新增用戶名稱為david的用戶

    */

   @PreAuthorize("#user.name.equals('david')")

   public void add(User user) {

  }

調用find(String username)時只允許username為當前用戶的用戶名;定義了調用add()方法時只有當參數user的name為david時才可以調用。

/**

* 限制只能查詢Id小於100的用戶

*/

@PreAuthorize("#id<100")

public User find(int id) {
System.out.println("find user by id........." + id);

}

 在上面代碼中我們定義了調用find(int id)方法時,只允許參數id小於10的調用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM