ToB企服应用市场:ToB评测及商务社交产业平台

标题: 基于SpringSecurity的@PreAuthorize实现自定义权限校验方法 [打印本页]

作者: 麻花痒    时间: 2022-9-16 17:20
标题: 基于SpringSecurity的@PreAuthorize实现自定义权限校验方法
一、前言

在我们一般的web系统中必不可少的就是权限的配置,也有经典的RBAC权限模型,是基于角色的权限控制。这是目前最常被开发者使用也是相对易用、通用权限模型。当然SpringSecurity已经实现了权限的校验,但是不够灵活,我们可以自己写一下校验条件,从而更加的灵活!
很多开源框架中也是用的比较多,小编看了一下若依是自己写了一个注解实现的,pig是使用@PreAuthorize来实现自己的校验方式,小编以pig框架的为例。
二、SpringSecurity的@PreAuthorize
  1. @PreAuthorize("hasAuthority('system:dept:list')")
  2. @GetMapping("/hello")
  3. public String hello (){
  4.     return "hello";
  5. }
复制代码
我们进去源码方法中看看具体实现,我们进行模仿!
  1. // 调用的方法
  2. @Override
  3. public final boolean hasAuthority(String authority) {
  4.         return hasAnyAuthority(authority);
  5. }
  6. @Override
  7. public final boolean hasAnyAuthority(String... authorities) {
  8.         return hasAnyAuthorityName(null, authorities);
  9. }
  10. private boolean hasAnyAuthorityName(String prefix, String... roles) {
  11.         Set<String> roleSet = getAuthoritySet();
  12.         // 便利规则,看看是否有权限
  13.         for (String role : roles) {
  14.                 String defaultedRole = getRoleWithDefaultPrefix(prefix, role);
  15.                 if (roleSet.contains(defaultedRole)) {
  16.                         return true;
  17.                 }
  18.         }
  19.         return false;
  20. }
复制代码
三、权限校验判断工具

[code]@Component("pms")public class PermissionService {        /**         * 判断接口是否有xxx:xxx权限         * @param permission 权限         * @return {boolean}         */        public boolean hasPermission(String permission) {                if (StrUtil.isBlank(permission)) {                        return false;                }                Authentication authentication = SecurityContextHolder.getContext().getAuthentication();                if (authentication == null) {                        return false;                }                Collection




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4