2024年最新SpringBoot前后端分离后台管理系统分析,真香(1),网易有道java面试题

读者福利

秋招我借这份PDF的复习思路,收获美团,小米,京东等Java岗offer

更多笔记分享

秋招我借这份PDF的复习思路,收获美团,小米,京东等Java岗offer

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

这个项目中就大量使用了 AOP 思想。简单举两个例子吧!

日志记录

====

利用 AOP 方式记录日志,只需要在 controller 的方法上使用 @Log(“”) 注解,就可以将用户操作记录到数据库,源码可查看 eladmin-logging这个 Module。。

@Log(“新增用户”)

@PostMapping(value = “/users”)

public ResponseEntity create(@Validated @RequestBody User resources){

checkLevel(resources);

return new ResponseEntity(userService.create(resources),HttpStatus.CREATED);

}

Redis 限流

========

利用 AOP 方式对接口进行限流,只需要在 controller 的方法上使用@Limit(“”) 注解即可,源码可查看 eladmin-common这个 Module。

/**

* 测试限流注解,下面配置说明该接口 60秒内最多只能访问 10次,保存到redis的键名为 limit_test,

*/

@AnonymousGetMapping

@ApiOperation(“测试”)

@Limit(key = “test”, period = 60, count = 10, name = “testLimit”, prefix = “limit”)

public int test() {

return ATOMIC_INTEGER.incrementAndGet();

}

基于 RBAC 的权限模块设计

===============

系统权限控制采用 RBAC 基于角色的权限访问控制(Role-Based Access Control) 思想(一种最常见的权限管理思想,在一些对于全权限控制要求比较严格的系统会使用到)。

什么是 RBAC 呢?

简单地说:一个用户可以拥有若干角色,每一个角色有可以被分配若干权限这样,就构造成“用户-角色-权限” 的授权模型。在这种模型中,用户与角色、角色与权限之间构成了多对多的关系,如下图

SpringBoot前后端分离后台管理系统分析,真香

RBAC

在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。

本系统的权限设计相关的表如下(一共 5 张表,2 张用户建立表之间的联系):

SpringBoot前后端分离后台管理系统分析,真香

通过这个权限模型,我们可以创建不同的角色并为不同的角色分配不同的权限范围(菜单)。

SpringBoot前后端分离后台管理系统分析,真香

自定义权限验证方式

=========

Spring Security 提供了Spring EL表达式,允许我们在定义接口的方法上面添加注解来实现权限控制。比如下面的接口表示用户拥有 admin、menu:edit 权限中的任意一个就能能访问update接口。

SpringBoot前后端分离后台管理系统分析,真香

但是,由于每个接口都需要给超级管理员放行,所以单纯使用这种注解的方式每次都需要重复的添加 admin 权限、

因此我们可以加入自定义权限验证方式,在验证的时候默认给拥有 admin 权限的用户放行。

源码:

// eladmin-common -> me.zhengjie.config.ElPermissionConfig

@Service(value = “el”)

public class ElPermissionConfig {

public Boolean check(String …permissions){

// 获取当前用户的所有权限

List elPermissions = SecurityUtils.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());

// 判断当前用户的所有权限是否包含接口上定义的权限

return elPermissions.contains(“admin”) || Arrays.stream(permissions).anyMatch(elPermissions::contains);

}

}

使用方式:

@ApiOperation(“查询任务执行日志”)

@GetMapping(value = “/logs”)

@PreAuthorize(“@el.check(‘timing:list’)”)

public ResponseEntity queryJobLog(JobQueryCriteria criteria, Pageable pageable){

return new ResponseEntity<>(quartzJobService.queryAllLog(criteria,pageable), HttpStatus.OK);

}

对应的数据库内容如下:

SpringBoot前后端分离后台管理系统分析,真香

SpringBoot前后端分离后台管理系统分析,真香

审计功能

====

在这个项目中,继承了 BaseEntity 的类会自动写入创建时间、修改时间、创建人、更新人这些数据。

SpringBoot前后端分离后台管理系统分析,真香

简单介绍一下上面涉及到的一些注解:

  1. @CreationTimestamp : 创建对象的时候自动生成时间戳。

  2. @UpdateTimestamp:创建对象的时候自动生成时间戳。

  3. @CreatedBy :表示该字段为创建人,在这个实体被 insert 的时候会设置值,@LastModifiedBy同理。

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏

还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

转存中…(img-jnA6ngvl-1715225557837)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值