微服务集成springsecurity:功能授权与数据授权

前言:最近怎么学习真没状态~~~~懒狗模式启动,听说好多在校考研的同学最近也学不下去了。哎呀,最近面了一下鲸浩科技的实习,到现在已经一天没回了,虽然我觉得面得还不错不过应该是挂了吧。

功能授权:基于注解preAuthorize,实现RBAC模型提供的权限授权

数据授权:这个就比较简单了,通俗的讲就是多租户:比如一个平台上有两家公司的管理员,他们俩不能串了管理信息,所以这里就需要通过特殊标识将他们管理的东西区分开比如为内容附上公司编号列名

功能授权:

授权模块:这里是为UserDetailsService添上最后缺的一个方法:为角色授权,返回的数据可以直接用在new User(user,password,authorities)的authorities中

复制代码
    private List<SimpleGrantedAuthority> getAuthorities(XcUserExt xcUser) {
        //根据用户id查询权限
        List<XcMenu> xcMenus = xcMenuMapper.selectPermissionByUserId(xcUser.getId());
        if (!xcMenus.isEmpty()) {
            List<String> menus = new ArrayList<>();
            xcMenus.forEach(xcMenu -> menus.add(xcMenu.getCode()));
        }
        List<SimpleGrantedAuthority> authorities = xcMenus.
                stream().
                map(xcMenu -> new SimpleGrantedAuthority(xcMenu.getCode())).
                collect(Collectors.toList());
        return authorities;
    }
复制代码
@Select("SELECT * FROM menu WHERE id IN (SELECT menu_id FROM permission WHERE role_id IN ( SELECT role_id FROM user_role WHERE user_id = #{userId} ))")
List<XcMenu> selectPermissionByUserId(@Param("userId") String userId);

相关SQL语句梳理

完成上述授权后只需要在相应微服务模块添加@PreAuthorize即可

数据授权:

具体业务模块:

首先需要解析gateway传来的jwt(oauth2自动集成)

通过SecurityContextHolder.getContext().getAuthentication().getPrincipal()获取我们存入username里的数据,然后可以通过JSON.parseObject转成相应对象。

一般具体对象内包含了明确的相关标识,取出来和响应模块比对即可

例如:userdetails中存有companyId成员,对应的内容模块内的内容表也存有相应的companyId字段。

posted @   天启A  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示