Kaze
Kaze
Published on 2023-10-20 / 14 Visits
0
0

SpringSecurity

参考文章

参考源码

基于路径的动态权限

security模块

目录结构如图所示:

image-20230427235926800

整合步骤
  • 第一步,给需要登录认证的模块添加security模块的依赖

  • 第二步,添加xxxSecurityConfig配置类,配置UserDetailsService、DynamicSecurityService这两个Bean,一个负责获取登录用户信息,另一个负责获取存储的动态权限规则

    /**
     * mall-security模块相关配置
     * 自定义配置,用于配置如何获取用户信息及动态权限
     */
    @Configuration
    public class MallSecurityConfig {
    
        @Autowired
        private UmsAdminService adminService;
        @Autowired
        private UmsResourceService resourceService;
    
        @Bean
        public UserDetailsService userDetailsService() {
            //获取登录用户信息
            return username -> adminService.loadUserByUsername(username);
        }
    
        @Bean
        public DynamicSecurityService dynamicSecurityService() {
            return new DynamicSecurityService() {
                @Override
                public Map<String, ConfigAttribute> loadDataSource() {
                    Map<String, ConfigAttribute> map = new ConcurrentHashMap<>();
                    List<UmsResourceDTO> resourceList = resourceService.listAll();
                    for (UmsResourceDTO resource : resourceList) {
                        map.put(resource.getUrl(), new org.springframework.security.access.SecurityConfig(resource.getId() + ":" + resource.getName()));
                    }
                    return map;
                }
            };
        }
    
    }
    
  • 第三步,在application.yml中配置下不需要安全保护的资源路径:

    secure:
      ignored:
        urls: #安全路径白名单
          - /swagger-ui/
          - /swagger-resources/**
          - /**/v2/api-docs
          - /**/*.html
          - /**/*.js
          - /**/*.css
          - /**/*.png
          - /favicon.ico
          - /actuator/**
          - /druid/**
          - /admin/login
    

Comment