Mall 动态权限学习参考

代码仓库

https://github.com/Rain-with-me/JavaStudyCode/tree/main/4-springboot-security-dynic

  • 本文查看 Mall 的动态权限管理

动态权限的思路

路由拦截思路

  • 把需要权限拦截的路由放在数据库中,当请求发送过来进行判断,如果是白名单的直接通过,然后看他是否添加权限路由,如果有就进行比对,这个以后含有这个权限就可以访问。

Mall 动态权限学习参考

实现思路

可以先过一遍 Mall 的文档: https://www.macrozheng.com/mall/technology/permission_back.html#基于路径的动态权限控制

  • 使用一个拦截器进行鉴权
  • 一个用户的注册,就分配了用户权限的级别,然后有他包含的权限
  • 白名单跳过,没有在权限表的跳过
  • 首先获取访问的路径,这里是使用的 Ant 风格,然后和用户包含的权限进行匹配
  • 这里的实现首先把所有的权限名字放在一个 Map 里面,Mao 里面的加载使用 loadDataSource 当权限表进行更改,就刷新里面的值
    Mall 动态权限学习参考

Mall 动态权限学习参考

获取用户权限列表

Mall 动态权限学习参考
 @Override
    public UserDetails loadUserByUsername(String username) {
        //获取用户信息
        UmsAdmin admin = getAdminUsername(username);
        if (admin != null) {
            List resourceList = umsResourceService.getResourceList(admin.getId());
            return new AdminUserDetails(admin,resourceList);
        }
        throw new UsernameNotFoundException("用户名或密码错误");
    }

添加白名单

  • 建议使用多环境 (dev,test)
-是数组
secure:
  ignored:
    urls: #安全路径白名单
      - /swagger-ui.html
      - /swagger-resources/**
      - /swagger/**
      - /**/v2/api-docs
      - /**/*.js
      - /**/*.css
      - /**/*.png
      - /**/*.ico
      - /webjars/springfox-swagger-ui/**
      - /actuator/**
      - /druid/**
      - /admin/login
      - /admin/register
      - /admin/info
      - /admin/logout
      - /minio/upload
  • 获取白名单数组
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.ArrayList;
import java.util.List;

/**
 * SpringSecurity白名单资源路径配置
 * Created by macro on 2018/11/5.

 */
@Getter
@Setter
@ConfigurationProperties(prefix = "secure.ignored")
public class IgnoreUrlsConfig {

    private List urls = new ArrayList<>();

}

  • SecurityConfig 配置进去
   @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests();

        // 不需要保护的资源路径允许访问
        for (String url : ignoreUrlsConfig().getUrls()) {
            registry.antMatchers(url).permitAll();
        }

        registry.antMatchers(HttpMethod.OPTIONS).permitAll();

        // 其他任何请求都需要身份认证
        registry.and()
                .authorizeRequests()
                .anyRequest()
                .authenticated()
                // 关闭跨站请求防护及不使用session
                .and()
                .csrf()
                .disable()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                // 自定义权限拒绝处理类
                .and()
                .exceptionHandling()
                .accessDeniedHandler(restfulAccessDeniedHandler)
                .authenticationEntryPoint(restAuthenticationEntryPoint)
                // 自定义权限拦截器JWT过滤器
                .and()
                .addFilterBefore(jwtAuthenticationTokenFilter(), UsernamePasswordAuthenticationFilter.class);
    }

       /**
     * @Description: 配置文件读取白名单
     * @Author: 雨同我
     * @DateTime: 2022/9/20 8:58
    */
    @Bean
    public IgnoreUrlsConfig ignoreUrlsConfig() {
        return new IgnoreUrlsConfig();
    }

Original: https://www.cnblogs.com/rain-me/p/16724964.html
Author: 雨同我
Title: Mall 动态权限学习参考

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611808/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java学习-第一部分-第三阶段-项目实战:多用户即时通讯系统

    service ClientConnectServerThread package com.hspedu.qqclient.service; import com.hspedu.q…

    数据库 2023年6月11日
    075
  • Python递归遍历目录并删除文件中的前N行

    1 import os 2 3 # 遍历目录下的所有文件 4 def check_file(file_path): 5 os.chdir(file_path) 6 print(os…

    数据库 2023年6月14日
    074
  • JavaWeb过滤器Filter(附tomcat部分源码分析)

    过滤器Filter 过滤器通常对一些web资源进行拦截,做完一些处理器再交给下一个过滤器处理,直到所有的过滤器处理器,再调用servlet实例的service方法进行处理。过滤器可…

    数据库 2023年6月16日
    0116
  • 4. 事务和锁

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    数据库 2023年5月24日
    076
  • Mybatis SqlNode源码解析

    1.ForEachSqlNode mybatis的foreach标签可以将列表、数组中的元素拼接起来,中间可以指定分隔符separator <select id="…

    数据库 2023年6月16日
    068
  • CSS进阶内容—浮动和定位详解

    CSS进阶内容—浮动和定位详解 我们在学习了CSS的基本知识和盒子之后,就该了解一下网页的整体构成了 当然如果没有学习之前的知识,可以到我的主页中查看之前的文章: CSS的三种布局…

    数据库 2023年6月14日
    069
  • SpringSecurity

    一、SpringSecurity介绍 1、介绍 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的事实上的标…

    数据库 2023年6月6日
    083
  • [mybatis]快速搭建一个mybatis程序,实现对数据的增删改查

    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。 MyBati…

    数据库 2023年5月24日
    080
  • 0x03MySQL的SQL基础

    0x03MySQL的SQL基础1.SQL介绍结构化的查询语言,关系型数据库中用的一类语言。SQL标准 89 92 99 03MySQL 2.SQL类常用型2.1 mysql自带的功…

    数据库 2023年6月9日
    078
  • gauss正则找汉字

    select substring( ‘沙特阿拉伯6.20’ from ‘[\u4E00-\u9FA5]{2,5}’ )返回 ‘沙特阿拉伯’ Original: https://ww…

    数据库 2023年6月16日
    066
  • 摸鱼系列之idea摸鱼插件推荐

    前言 作为一枚程序员,上班时候正撸着代码呢,撸不出代码了,没灵感了,看需求念头不通达了,脑瓜里蹦不出一丁点火花了,这时候怎么办?程序在运行,还要好几分钟,等待时间里,白白浪费了,玩…

    数据库 2023年6月16日
    0112
  • 【Java基础】– FileUtils工具类常用方法

    1.FileUtils介绍 文件IO是我们日常项目中经常使用到的基础API,常见的IO读写操作基础类字节流InputStream与OutputStream、字符流Reader与Wr…

    数据库 2023年6月6日
    0346
  • sql查询结果的排序问题

    在sql语句中的查询语句,不同的写入顺序会导致查询的结果不一样 比如我要查询一个联合表中的同学,如果查询的顺序不一样的话,那么结果就会不同 上图为数据的关系图 下面我们要查询张三老…

    数据库 2023年6月11日
    079
  • ORA-01950: no privileges on tablespace ‘USERS’– 解决办法

    ORA-01950: no privileges on tablespace ‘USERS’ 原因: 在表空间 “USERS” 无权…

    数据库 2023年6月14日
    097
  • Spring Boot MongoDB

    Linux下启动MongoDB并使用mongosh连接 启动方式有两种: systemctl start mongod mongod 启动的时候有可能会报类似如下的错误: Exec…

    数据库 2023年6月14日
    074
  • 重新学习数据库(1)

    单元概述 通过本章的学习能够了解MySQL结构查询语言的概念,掌握SELECT查询语句的基本语法,掌握SELECT查询语句中过滤条件的使用,掌握过滤条件中比较运算符和逻辑运算符的使…

    数据库 2023年6月16日
    0179
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球