PreAuthorize 怎么获取用户权限
时间: 2023-10-20 07:11:08 浏览: 51
在Spring Security中,PreAuthorize注解可以用于在方法执行前对用户的权限进行验证。要获取用户权限,可以使用Spring Security提供的SecurityContextHolder类,该类提供了一种方便的方式来获取当前已经通过身份验证的用户的详细信息,包括用户名、密码和权限等信息。
例如,在Controller中可以使用以下代码获取当前用户的权限列表:
```
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
...
@RequestMapping("/hello")
@PreAuthorize("hasAuthority('ROLE_ADMIN')")
public String hello() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
Set<String> authorities = userDetails.getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toSet());
System.out.println("当前用户权限列表:" + authorities);
return "hello";
}
```
在上面的代码中,我们首先通过SecurityContextHolder.getContext().getAuthentication()方法获取当前用户的Authentication对象,然后再通过getPrincipal()方法获取UserDetails对象,最后通过getAuthorities()方法获取用户的权限列表。注意,getAuthorities()方法返回的是一个包含了所有权限的集合,需要使用stream()和map()方法将其转换为一个字符串集合。