快速开发平台 fast_security_admin(三):登录验证与动态权限管理

快速开发平台 fast_security_admin(三):登录验证与动态权限管理

前言

原本是计划5.25完成,中间因为学习遇到了困境加上去做了一个微信小程序,这个项目就搁置到现在了,当然现在是确实有了重大突破,但是很惭愧这些突破只能算是学习的突破不能算是我自己的成果。

几乎完全是参考的 mall项目 的权限管理部分,可以说mall的权限管理部分非常好,讲解与非常细。

mall的动态权限管理

mall-learning

这篇博客介绍一下遇到的问题,以及思路。

库表设计

现在是完全更新了数据库。详情访问下面地址下载sql文件。

https://gitee.com/liugoodman/fast_security_admin

关于动态权限验证

实际是RBAC系统,就是把用户有哪些权限存起来,user——role——resource,用户根据角色获得资源(权限)。

可以在方法接口上写注解来实现,但是这不是动态,我们要求完全从数据库获得权限信息。

那么使用SpringSecurity要想实现动态的权限验证总体上分两步。

  • 通用SpringSecurity的配置
  • 具体资源的加载

在这里插入图片描述

在通用SpringSecurity的配置代码非常死!!!谁写都是这点代码,完全复制没有问题。

重点是加载数据。

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class FsAdminSecurityConfig extends SecurityConfig {
    @Autowired
    private FsUserAuthsService fsUserAuthsService;
    @Autowired
    private FsResourceService fsResourceService;

    @Bean
    public UserDetailsService userDetailsService() {
        //获取登录用户信息
        return username -> fsUserAuthsService.loadUserByUsername(username);
    }

    @Bean
    public DynamicSecurityService dynamicSecurityService() {
        return new DynamicSecurityService() {
            @Override
            public Map<String, ConfigAttribute> loadDataSource() {
                Map<String, ConfigAttribute> map = new ConcurrentHashMap<>();
                List<FsResource> resourceList = fsResourceService.list();
                for (FsResource resource : resourceList) {
                    map.put(resource.getResourcePath(), new org.springframework.security.access.SecurityConfig(resource.getId() + ":" + resource.getResourcePath()));
                }
                return map;
            }
        };
    }
}

实际上加载数据也是非常死,但是根据你设计的表不同会有区别,要加载两部分:用户信息(用户名、密码、权限资源),重点是loadUserByUsername(username),这个方法是SpringSecurity给我们让我们实现的接口,参数必须是username,这个用户名不一定是你登录时输入的,但必须是你可以根据登录时的输入获得的,并且它是唯一的!!!通过它我们要获得用户的信息SpringSecurity自动与输入的用户名密码对比。第二部分是所有权限的列表,SpringSecurity拿之前获得的用户权限和权限表里面的数据对比,有匹配上的说明是拥有此权限,权限表里面有而用户权限里面没有,说明用户不具备此权限。

我们看到了@Bean注解,数据被注入到了缓存之中,也就是被SpringSecurity获取了。

SpringSecurity的鉴权方法是配置在SpringSecurity之中的,具体如何实现请看mall的动态权限管理

接下来要做的

在这里插入图片描述

彩色的部分要求全部是动态的从数据库获取,前端封装成通用组件。

menu——entity——list

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值