Spring Security 中的 hasRole() 和 hasAuthority() 有什么区别

sch*_*hau 5 spring-security

假设我有一个用户具有以下身份验证:

 List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
 grantedAuthorities.add(new SimpleGrantedAuthority("READ_PRODUCT"));
 grantedAuthorities.add(new SimpleGrantedAuthority("WRITE_PRODUCT"));

 SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken("usr", "pwd", grantedAuthorities));
Run Code Online (Sandbox Code Playgroud)

在安全检查中,我应该检查用户是否具有访问 API 的正确权限。我做了以下事情来实现它:

 http
    .httpBasic().disable()
    .authorizeRequests()
    .antMatchers(HttpMethod.GET, "/product/**").hasAuthority("READ_PRODUCT");
Run Code Online (Sandbox Code Playgroud)

这里我hasAuthority()用来检查用户是否有正确的权限,但是我发现还有一个方法被调用了hasRole()但是我不知道这两个方法的区别是什么?谁能解释我的区别,如果我想在hasRole()这里使用,我如何在这里使用它?我试图替换hasAuthority()hasRole()但没有成功

Dud*_*arn 4

hasRole()定义角色(例如:“员工”或“访客”),同时 hasAuthority()定义权限(例如:一名员工只能使用主门,但另一名员工也可以使用后门)