微服务集成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字段。
标签:
springsecurity
, 软件工程日报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署