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

打印 上一主题 下一主题

主题 928|帖子 928|积分 2784

一、前言

在我们一般的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
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

麻花痒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表