springboot使用切面编程,实现不同角色账号看到的数据不同

springboot中使用spring-security进行登陆控制 目录结果展示1. 引入依赖2. 配置User类3. 配置TtUserServiceImpl方法3. 最重要的WebSecurityConfig4. CustomLoginHandler类5. RespBean对象6. Debug过程项目启动前端发出请求(/api/user)根据用户名查询用户是否存在判断用户密码是否匹配登陆成功获取角色信息封装返回对象返回给前端 在springboot项目中使用s... 阅读详情

在Spring Boot中,可以使用切面编程来实现不同角色账号看到的数据不同的功能。下面是一个示例:

首先,定义一个自定义的注解 @RoleAccess,用于标注在需要进行角色访问控制的方法上:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RoleAccess {
    String[] roles();
}

接着,创建一个切面类 RoleAccessAspect,用于拦截带有 @RoleAccess 注解的方法,并根据当前用户的角色进行访问控制:

@Aspect
@Component
public class RoleAccessAspect {
    
    @Before("@annotation(roleAccess)")
    public void before(JoinPoint joinPoint, RoleAccess roleAccess) {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication != null && authentication.isAuthenticated()) {
            String currentRole = authentication.getAuthorities().stream()
                    .map(GrantedAuthority::getAuthority)
                    .collect(Collectors.joining(","));
            if (!Arrays.asList(roleAccess.roles()).contains(currentRole)) {
                throw new AccessDeniedException("Access Denied");
            }
        }
    }
}

在上面的切面类中,通过 @Before 注解和 @annotation(roleAccess) 使用了切点表达式,表示拦截带有 @RoleAccess 注解的方法,并在方法执行前进行访问控制。

然后,在需要进行访问控制的方法上添加 @RoleAccess 注解,指定不同角色具有访问权限的配置,例如:

@RestController
public class DataController {
    
    @RoleAccess(roles = {"admin"})
    @GetMapping("/data")
    public String getDataForAdmin() {
        return "This data is only accessible to admins";
    }
    
    @RoleAccess(roles = {"user"})
    @GetMapping("/data")
    public String getDataForUser() {
        return "This data is only accessible to users";
    }
}

在上面的示例中,同一个接口路径 /data 根据不同角色的配置,返回不同的数据。

最后,需要在启动类上添加 @EnableAspectJAutoProxy 注解启用切面:

@SpringBootApplication
@EnableAspectJAutoProxy
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

这样,当不同角色的账号访问相应的接口时,切面会根据当前用户的角色进行访问控制,确保只有具有访问权限的角色可以看到相应的数据。

SpringBoot+Shiro配置数据库实现后台管理页面根据角色权限动态生成菜单栏 目录前言配置数据库动态生成菜单栏步骤后台搭建数据库表后台实现shiro配置总结参考表数据测试页面效果 前言 SpringBoot+Shiro做后台管理项目配置权限时,普遍的做法是通过配置shiro标签在html页面里面,来判断当前用户是否拥有该权限,来确认是否展示当前菜单,shiro标签类似如下: <!--验证当前用户是否拥有指定权限。 --> <a shiro:hasPerm... 阅读详情

相关推荐

【SpringBoot】94、SpringBoot中使用MyBatis-Plus实现数据权限管理

数据权限是指在特定场景下,对数据的访问、使用、共享等操作的权限。它涉及到系统用户能看到哪些范围内的数据,以及这些用户如何操作这些数据

JACKAL 3万+

springboot实现AOP切面编程

概述 AOP(Aspect Oriented Programming) 即面向切面编程。面向切面是面向对象中的一种方式而已。在代码执行过程中,动态嵌入其他代码,叫做面向切面编程(将交叉业务逻辑封装成成切面,利用AOP功能将切面织入到主业务逻辑———与主业务逻辑无关的代码,使用场景如:安全检查,事物,日志等 。 AOP是一种方式,实现AOP的库有名的有两个AspectJ和spring AOP. 核心...

ityqing的博客 6001

spring boot+shiro+mybatis实现不同用户登录显示不同的权限菜单

spring boot+shiro+mybatis实现不同用户登录显示不同的权限菜单

SpringBoot中使用Aspect实现切面,超详细

Spring中的Aspect,这是Spring的一大优势。面向切面编程往往让我们的开发更加低耦合,也大大减少了代码量,同时呢让我们更专注于业务模块的开发,把那些与业务无关的东西提取出去,便于后期的维护和迭代。相关的学习教程是看的动力节点的视频,然后整理了这篇博客作为笔记,方便以后复习时候看看,也分享给有需要的小伙伴。

weixin_45131680的博客 2853

为什么不同用户登录同一个页面,看到的是不同数据

大家都知道,比如我们登录一个OA网站,看到的数据和同事的是有不同的,简单一想,是因为我们的登录账户不同,但是技术上是怎么实现的呢? 尤其是login后,我们访问的都是同一个URL,为什么页面上展示的数据会不同呢? 技术初探 最近小编亲自编写了一个web应用,终于略懂一二,和大家分享。 后台会根据请求所关联的用户去过滤数据 用户在浏览器中输入URL,后台根据URL匹配处理他的视图,返回属于该用户的数据。 为什么在浏览器中输入URL,后台程序能知道这次请求所关联的用户是谁?请看下一节,技术细探 技术细探(Cookie/Session机制详解) 会话(Session)跟踪是Web程序中常用的技术,

数据可视化—power bi 基础操作汇总

数据来源: https://pan.baidu.com/s/1U_Y7rKfhnSKbLmh4FcUD_Q 提取码: yq5v 目录 基本功能与视图 编辑与查询—修改column案例 建立关联性 新增column与DAX完成总价运算 习题练习1:建立可视化图表 产品销售统计图 column拖曳可视化 1.基本功能与视图 ①基础操作界面 ②获取数据—以打开excel为例 ③数据文件基本视图 可视化形式:柱状图、数据、关联性 2.编辑与查询—修改column ①编辑与查询—数据处理界面 .

weixin_52730784的博客 2681

java同个界面不同内容_java编程 聊天室怎样实现当前用户窗口与其他用户窗口显示内容不同...

其它网友回答:你这根本什么都没写啊,原来写了个模拟QQ的,不过没去画界面,供你参考下,希望能帮到你,主要的是你把原理弄清楚就应该没问题了服务器:importjava.io.*;importjava.net.*;importjava.util.HashMap;importjava.util.Scanner;importjava.util.regex.*;publicclassServe...

weixin_28726671的博客 315

秦时明月6.2魔改版_从零到一部署指南_含安卓客户端配置与GM后台直通

本文提供《秦时明月》6.2魔改版从零开始的完整部署指南。详细讲解CentOS服务器环境准备、服务端文件部署与安装、关键端口开放及进程验证。重点涵盖安卓客户端APK的IP修改与重签名方法,并介绍了GM后台工具的访问与使用,助你快速搭建并管理专属游戏服务器。

garlic的博客 310

Java设计模式:访问者模式,同一数据对象,不同访问者索取目的不同

/** * 员工接受不同部门的数据访问。 * 但是不同部门访问该名员工获取的数据不相同。 * * @author zhangfly * * @param <T> */ public abstract class Employee<T> { public abstract void accept(Department department); pu...

Zhang Phil 1364

DeepSeek-OCR又更新:一起看下OCR1和OCR2

DeepSeek-AI 最近又又开源了,这次是DeepSeek-OCR2,结合之前发布的DeepSeek-OCR ,可以发现DeepSeek走出了一条不同于主流 OCR 方案的技术路线。第一代模型探索了**“视觉作为文本压缩介质”的可行性,打破了传统的序列长度限制;第二代模型则通过“Visual Causal Flow(视觉因果流)”**架构,将因果推理引入视觉编码器,解决了复杂排版下的阅读顺序难题。本文将从架构设计、逻辑结构、训练范式及工程实现四个维度,深度剖析这两代模型的异同与创新。

kakaZhui的博客 623

FPGA篮球计分器:从需求分析到模块化实现的实战指南

本文详细介绍了FPGA篮球计分器的设计与实现,涵盖需求分析、模块化设计及实战调试。重点解析了24秒精确倒计时、12分钟比赛计时、比分统计和数码管显示等核心模块的Verilog实现,提供了按键消抖、状态机设计和BCD码处理等关键技术细节,帮助开发者掌握FPGA数字系统设计方法。

sql99的博客 218

SpringBoot不同角色显示不同的菜单

最近准备把之前的博客重写,有时间还是要更新一些博客,防止权重下降,水一水。 通常我们后台有很多不同的角色登录,每个角色不同的权限,这个在 SpringBoot整合Shiro实现权限控制,验证码,记住我 中已经介绍了,这次我们介绍一下,如何根据不同的角色登录显示不同的菜单。 比如我目前只有两个角色,系统管理员和普通用户。 当用户登录后台的时候,通过 ajax 从后台获取菜单列表,redis 做缓存,...

weixin_43694038的博客 7509

基于javaEE的图书管理系统

极简的图书管理系统,无任何样式修饰,适合新手练手(图文并释) 1、实现了用户注册、登录,图书的添加、修改、删除和修改操作 2、工具需要:eclipse、mysql、Tomcat 3、做系统之前在eclipse需要配置Tomcat服务器和导入mysql连接数据库的jar包 4、数据库中建一个user表存用户信息,一个book表存图书信息 一、各种页面 index.html文件,系统运行的首页,有登录...

qq_44357792的博客 2万+

SpringBoot:实现用户根据角色登录不同的页面

本文记录用SpringBoot 实现简单的用户登录过程,对于初步入门的我来说遇到了很多的困难,所以在实现登录后特写此篇文章。描述我在实现过程中遇到的问题和疑惑,也算是自己的学习笔记吧!! 开发环境: IDE:JetBrains Intelij IDEA Java:JavaSE13 详细过程: 文件目录: 【domain】目录主要用于实体(Entity)与数据访问层(Repository...

学而不思则忘 4万+

从业务角色到工作台:一步步创建 SAP Fiori Launchpad Space 与 Page

SAP S/4HANA Launchpad 配置优化指南:从业务角色出发构建高效工作台 本文针对S/4HANA项目中用户普遍反映的"入口难找"问题,提出基于Spaces和Pages的系统化解决方案。通过"以工作岗位为中心"的设计理念,将Launchpad信息架构重构为:一个业务角色对应一个Space,每个Space包含1-5个Page,Page内按任务划分2-5个Section,每个Section放置3-7个Tiles。文章详细阐述了从Business Role入手配

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 224

100天精通Python(基础篇)——第3天:运算符全解析(算术运算符、比较运算符、逻辑运算符、赋值运算符及其优先级规则)

100天精通Python(基础篇)——第3天:运算符全解析(算术运算符、比较运算符、逻辑运算符、赋值运算符及其优先级规则)

努力让自己发光,对的人才能迎着光而来 14万+

springBoot和security实现不同用户登录

通过访问数据库,实现不同用户,不同角色登录系统。 一 创建数据表 角色表 role:

随心笔记 6341

LeRobot 入门教程(十七)NVIDIA IsaacLab Arena 集成

LeRobotEnvHub现已集成IsaacLabArena实现GPU加速仿真,支持GR1/G1/伽利略人形机器人实体和多种操作任务。安装需满足CUDA GPU、Ubuntu系统和IsaacSim 5.1.0要求,通过conda环境配置依赖项。系统提供SmolVLA和PI0.5等预训练策略评估功能,支持视频录制和并行环境配置。环境配置选项涵盖机器人实体、任务类型、观测维度等参数,并包含针对CUDA内存、视频录制等常见问题的解决方案。此外,LightWheel AI还通过LW-BenchHub引入了包含268

2506_90492529的博客 1246

手把手教你 使用SpringBoot 实现业务数据动态脱敏

数据脱敏(),顾名思义,是屏蔽敏感数据,对某些敏感信息(比如,身份证号、手机号、卡号、客户姓名、客户地址、邮箱地址、薪资等等 )通过脱敏规则进行数据的变形,实现隐私数据的可靠保护。业界常见的脱敏规则有,替换、重排、加密、截断、掩码,用户也可以根据期望的脱敏算法自定义脱敏规则。良好的数据脱敏实施,需要遵循如下两个原则, 第一,尽可能地为脱敏后的应用,保留脱敏前的有意义信息;第二,最大程度地防止黑客进行破解。这里我画一张图来更清楚的理解什么是数据脱敏。数据脱敏又分为静态数据脱敏(SDM)和 动态数据脱敏(

你若为我繁华,我愿成你烟花 3265

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Springboot 整合SpringSecurity实现账号密码+手机验证码登陆

Springboot 整合SpringSecurity实现账号密码+手机验证码登陆示例说明版本示例安装Spring-security 介绍为什么不用 shiroSpring-Security 做用户认证、授权CSRF 跨站请求伪造防护iframe 嵌入提升用户、编码体验更多 SpringSecurity 是 Spring 提供安全管理框架。核心内容包含认证、授权、攻击防护。实际上SpringSecurity 已经发展了多年了,但是在 SSM/SSH 中整合 SpringSecurity 相较于 Shiro

alexliu0725的博客 5574

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

springboot+vue+elementsUI 实现分角色注册登录界面

注册功能:只允许用户和设计师注册,用户可以直接注册成功,设计师提交材料后注册需要管理员审核成功后方可注册成功。(7)CodeGenerate.java文件 这个是跟着老师敲的文件,具体有什么作用还没明白。账号:用户自定义,注册成功后不可修改,同一个角色下账号不重复,不同角色账号可以重复。登录功能:账号+密码+身份选择,登录成功后跳转到各身份对应的页面。(1)LoginController.java文件。(3)Result.java文件。(2)user.java文件。(3)index.js文件。

weixin_52550704的博客 8077

springboot 整合 security(二) 使用数据库账号密码实现登录流程

上篇讲了如何简单实现security功能,但只能使用框架指定的账号密码,不符合我们的应用场景。这篇讲一下如何使用数据库账号密码实现登录流程 首先,还是创建我们的项目 然后是数据库的设计 然后是用户controller层的代码 UserController.java @RestController @RequestMapping("user") public class UserController { @Autowired UserService userService; .

TT_QY的博客 3455

【项目实践】实现根据登录不同角色跳转至对应界面(springboot+vue的家教平台项目)

项目中有三种不同角色,分别是管理员,教师,家长。现在要实现在登录时根据不同的角色跳转至不同的界面。

小菜的博客 1594

SpringBoot+Shiro+kaptcha验证码实现用户登录和根据角色跳转页面

这篇文章主要实现用户登录功能:用户输入自己的账号、密码以及验证码后,会进行身份验证,认证通过的系统会自动判断该用户的身份,跳转到不同的管理界面。 要实现的功能 用户登录判断 根据用户角色自动跳转不同的页面 加入验证码进行验证 开发前的准备 文件目录 设置和连接数据库 建立数据库 在Navicat中建立一个数据库,并建立一张用户表(用来存储要登录的用户) 用户登录主要用到下面这张user表,这里事先输入了用户名和密码(用于测试,到后面可以自己添加、修改等)。 CREATE TABLE `user`.

学而不思则忘 2571

SpringBoot整合Springsecurity实现数据库登录以及权限控制

我们今天使用SpringBoot来整合SpringSecurity,来吧,不多BB 首先呢,是一个SpringBoot 项目,连接数据库,这里我使用的是mybaties.mysql, 下面是数据库的表 DROP TABLE IF EXISTS `xy_role`; CREATE TABLE `xy_role` ( `xyr_id` int(11) NOT NULL AUTO_INCRE...

qq_39620552的博客 4万+

MongoDB账号管理

本文主要介绍一些与MongoDB账号管理相关的命令,以及与Spring Boot整合时的问题。 MongoDB的账号体系 环境 MongoDB 5.0.2 原则 MongoDB的每个数据库都可以管理账号(除了local数据库),每个数据库之间的账号都是独立的,使用哪个数据库的账号取决于登入时--authenticationDatabase后指定的数据库(不指定时认使用admin,即默认为--authenticationDatabase admin)。 相关命令 基本: 启动

java_t_t的博客 3144
上一篇: 统计小时,天,月,年增量累计的数据思路(以充电量和放电量为例)
下一篇: 浅谈maven的生命周期
小亮学java
博客等级 码龄7年 175粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值