按照前面得理论,我们完成了Token的纷发,权限角色的校验,但是在访问接口的时候发现,当前的系统不能限制权限的访问

如何校验权限角色?

Spring官方文档 11.3.3。方法安全性表达式 通过启用权限角色注解

@PreAuthorize@PreFilter@PostAuthorize@PostFilter

xml启动使用

<global-method-security pre-post-annotations="enabled"/>

注解启用:@EnableGlobalMethodSecurity(prePostEnabled = true)

如何限制接口访问权限?

 /**
 * 添加用户
 *
 * @param user 用户信息
 * @return
 */
@PreAuthorize("hasAnyRole('ADMIN')")
@PostMapping("save")
public R save(@NotNull User user) {
    userService.insert(user);
    return new R(HttpStatus.HTTP_OK, "保存用户成功");
}

@PreAuthorize("hasAnyRole('ADMIN')")标识当前的接口只有ROLE_ADMIN才能访问。

如何更简单的获取用户的信息

受公司项目所用的开发框架启发,结合之前我们的各种猜想,也不难理解这个需要怎么做,既然将权限交给了SpringSecurity,那肯定是从SpringSecurity中获取。

  • 如何将权限交给SpringSecurity管理?
SecurityContextHolder.getContext().setAuthentication(Authentication authentication);
  • 如何获取SpringSecurity管理的信息?

    SecurityContextHolder.getContext().getAuthentication();
    

    这些很明显都是必然的,不过多赘述了

结束语

到此我们算是完成了前后端分离的简单权限角色校验,在这个代码的完善过程中,我有一个很明显的感觉,Spring框架的优美和强大,他很难理解,很难上手,很难懂。不过那也正是其优美所在,一起加油吧!骚年!