基于SpringSecurity的@PreAuthorize实现自定义权限校验方法

您所在的位置:网站首页 preauthorize注解自定义方法 基于SpringSecurity的@PreAuthorize实现自定义权限校验方法

基于SpringSecurity的@PreAuthorize实现自定义权限校验方法

2023-08-19 14:10| 来源: 网络整理| 查看: 265

一、前言

在我们一般的web系统中必不可少的就是权限的配置,也有经典的​​RBAC权限模型​​​,是基于角色的权限控制。这是目前最常被开发者使用也是相对易用、通用权限模型。当然​​SpringSecurity​​已经实现了权限的校验,但是不够灵活,我们可以自己写一下校验条件,从而更加的灵活!

很多开源框架中也是用的比较多,小编看了一下若依是自己写了一个注解实现的,pig是使用​​@PreAuthorize​​来实现自己的校验方式,小编以pig框架的为例。

二、SpringSecurity的@PreAuthorize@PreAuthorize("hasAuthority('system:dept:list')")@GetMapping("/hello")public String hello (){ return "hello";}

我们进去源码方法中看看具体实现,我们进行模仿!

// 调用的方法@Overridepublic final boolean hasAuthority(String authority) { return hasAnyAuthority(authority);}

@Overridepublic final boolean hasAnyAuthority(String... authorities) { return hasAnyAuthorityName(null, authorities);}

private boolean hasAnyAuthorityName(String prefix, String... roles) { Set roleSet = getAuthoritySet(); // 便利规则,看看是否有权限 for (String role : roles) { String defaultedRole = getRoleWithDefaultPrefix(prefix, role); if (roleSet.contains(defaultedRole)) { return true; } } return false;}

三、权限校验判断工具@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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3