@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的調用。