SpringBoot+Spring Security + spring boot jpa 实现权限管理

如何实现一个简单的基于Spring Boot的用户权限管理系统? 随着Web应用程序的普及,用户权限管理系统已经成为每个应用程序中的核心模块之一。一个好的权限管理系统不仅能够保护系统资源的安全性,还能保证不同用户在系统中的操作符合预期。在现代的Web应用开发中,Spring Boot作为一种快速开发框架,在构建权限管理系统时提供了很多便捷的工具和组件。本文将带你一步步实现一个简单的基于Spring Boot的用户权限管理系统。我们将使用Spring Security来处理认证和授权,JPA来处理数据库操作,结合MySQL作为数据库存储。用户注册、登录、登出。 阅读详情

一 建表

权限管理需实现5张表:用户表、角色表、用户角色对应表、权限表、权限角色对应表

用户表
CREATE TABLE platform_user (
id bigint(20) NOT NULL AUTO_INCREMENT,
username varchar(50) NOT NULL,
password varchar(100) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

角色表
CREATE TABLE platform_role (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT=‘这只是角色表’;

用户角色对应表
CREATE TABLE platform_role_user (
id int(11) NOT NULL AUTO_INCREMENT,
user_id bigint(20) NOT NULL,
role_id int(11) NOT NULL,
PRIMARY KEY (id),
KEY FKt6466kf26ep5v3rfcya2sxi53 (role_id),
KEY FKfwy3bmkplk822fdp5o1btjyyv (user_id),
CONSTRAINT FKfwy3bmkplk822fdp5o1btjyyv FOREIGN KEY (user_id) REFERENCES platform_user (id),
CONSTRAINT FKt6466kf26ep5v3rfcya2sxi53 FOREIGN KEY (role_id) REFERENCES platform_role (id)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

权限表
CREATE TABLE platform_sys_permission (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
description varchar(50) NOT NULL,
url varchar(100) NOT NULL,
pid int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT=‘权限表’;
注意:如果存在子权限,一定要把最大的权限放在最后,否则在下面权限判定时,会出问题。

5. 权限角色对应表

    CREATE TABLE `platform_permission_role` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `role_id` int(11) NOT NULL,
     `permission_id` int(11) NOT NULL,
     PRIMARY KEY (`id`),
     KEY `role_id` (`role_id`)
     ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='角色权限管理表';

二 实体类

User.java

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = “username”,nullable = false,length = 50)
private String userName;

@Column(name = “password”,nullable = false,length = 100)
private String password;

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = “platform_role_user”, joinColumns = @JoinColumn(name = “user_id”, referencedColumnName = “id”), inverseJoinColumns = @JoinColumn(name = “role_id”, referencedColumnName = “id”))
private List roles;
省略 get set
Role.java

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

/**

  • 权限名
    */
    @Column(name = “name”, nullable = false,length = 50)
    private String name;

RoleUser.java

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(name = "user_id")
private Long userId;

@Column(name = "role_id")
private Integer roleId;

Permission.java

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

/**
 * 权限名
 */
@Column(name = "name",nullable = false)
private String name;

/**
 * 权限描述
 */
@Column(name = "description", nullable = false)
private String description;

/**
 * 权限的url
 */
@Column(name = "url", nullable = false)
private String url;

/**
 * 父节点id
 */
@Column(name = "pid")
private Integer pid;

PermissionRole.java

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(name = "role_id")
private Integer roleId;

@Column(name = "permission_id")
private Integer permissionId;

三 security 配置类

/**

  • @author: 易明星

  • @Modified By:

  • @Date: Create in 13:27 2019/6/24

  • @Description: 权限配置
    */
    @Configuration
    @EnableGlobalMethodSecurity(prePostEnabled=true)
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private MyFilterSecurityInterceptor myFilterSecurityInterceptor;

    @Autowired
    private CustomUserDetailService userDetailService;

    /**

    • 密码加密的方式
    • @return
      */
      @Bean
      public BCryptPasswordEncoder passwordEncoder() {
      return new BCryptPasswordEncoder();
      }

    /**

    • 加密密码
    • @param auth
    • @throws Exception
      */
      @Override
      protected void configure(AuthenticationManagerBuilder auth) throws Exception {
      auth.userDetailsService(userDetailService).passwordEncoder(passwordEncoder());
      }

    /**

    • security 具体的配置
    • @param http
    • @throws Exception
      */
      @Override
      protected void configure(HttpSecurity http) throws Exception {
      http
      .csrf().disable() //csrf不可用
      .authorizeRequests()
      .antMatchers("/static/", "/css/", “/js/", "/images/”, “/lib/**”).permitAll() //访问允许静态文件
      .antMatchers("/", “/login”).permitAll()//允许访问登录页
      .and()
      .formLogin()
      .loginPage("/login")//自定义登录页
      .failureUrl("/login?error")//指定登录失败页
      .defaultSuccessUrl("/driver/system.html") //登录成功跳转页
      .usernameParameter(“name”)//页面上使用的是 th:field 则需要写这个,否则不需要
      .passwordParameter(“passWd”)
      .and()
      .headers().frameOptions().disable()//in a frame because it set ‘X-Frame-Options’
SpringBoot + SpringSecurity + JPA 实现用户角色权限登录认证 IDEA + SpringBoot + SpringSecurity + JPA 实现用户角色权限登录认证,security过滤请求资源,用户登录获取用户角色权限,过滤用户非法请求等 立即下载

相关推荐

springboot+jpa+security用户权限

springboot+jpa+mysql+security的用户权限管理代码 。

Spring-Boot1.52 SpringSecurity4 Spring Data Jpa 整合例子

Spring-Boot1.52 SpringSecurity4 Spring Data Jpa 整合例子

strut2+spring+jpa开发权限管理

strut2+spring+jpa开发权限管理系统。

springboot+jpa+shiro基础权限管理系统Demo

springboot+jap+shiro 实现了用户、 角色、模块三个表的权限管理。增加对druid的数据监控,swagger ui的嵌入, 第一次优先把resources下的test数据库导入, 不然不能登录看到效果。 直接运行Application类即可启动。

关于自制的《航空学报》latex模板(非官网模板)

《航空学报》的官网只提供了word模板,并且该期刊投稿只需要pdf版本不需要源文件。为方便latex爱好者撰写论文,提供该模板及说明给广大科研人士~

qq_37105055的博客 4681

Mac上安装Label Studio

以上步骤详细说明了如何在Mac上通过Anaconda安装Label Studio。记得根据你的具体需求选择是否创建新的环境,并使用conda或pip进行安装。安装完成后,务必验证Label Studio是否成功运行。

g2526的博客 1954

sysbench测试系统内存

系统内存读写测试方法,报告解读

m0_61066945的博客 3011

大模型-高通qnn基础

提供较低级别、高度可定制的统一API,通过单独的库加速所有AI加速器核心上的AI模型, 可以直接用于针对特定的加速器核心或从流行的运行时(包括Qualcomm Neural Processing SDK、TensorFlow Lite和ONNX运行时)委派工作负载。一个支持异构计算、系统级配置的一体化SDK,旨在将AI工作负载引导到我们平台上的所有加速器核心。为开发人员提供灵活性,包括核心间协作支持和其他高级功能。是一个为训练好的神经网络模型提供高级量化和压缩技术的库。

点滴的岁月 4079

激光雷达点云可视化:Open3D与PCL实战

激光雷达点云可视化:Open3D与PCL实战 ,人工智能,计算机视觉,大模型,AI,该文围绕激光雷达点云可视化,介绍了Open3D与PCL的实战应用。先阐述点云基础概念、特点及可视化意义,接着讲解Open3D的简介、环境配置,以及其在点云读取、显示、颜色设置、下采样和滤波等方面的实战操作,还介绍了PCL的基础、环境配置及相关实战,包括点云读取、显示、颜色设置、下采样和滤波,同时对比了两者的易用性、功能覆盖、性能和适用场景,给出综合实战案例与常见问题解决方法,为点云可视化处理提供了全面指导。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 12万+

8、音频运行时系统的架构设计

本文深入探讨了音频运行时系统的分层设计及其优势,包括逻辑层和物理层的功能划分。通过分层设计,开发者可以更轻松地管理和优化音频资源,确保其在不同平台上的高效运行。文章还介绍了平台适配与优化、错误处理与调试以及未来发展方向等内容,为开发者提供了宝贵的参考和指导。

juice的博客 460

FFDNet-pytorch版本代码训练教程

该文章为FFDNet-pytorch版本代码训练教程,抓紧订阅学习!尽早入门发论文哦!

假技术Po主 1504

C++11、C++14 和 C++17 标准新特性详解

特性C++11C++14C++17auto类型推导✅范围 for 循环✅Lambda 表达式✅✅✅智能指针✅移动语义✅nullptr✅统一初始化{}✅✅constexpr✅✅✅✅数字分隔符✅结构化绑定✅✅✅文件系统库✅。

h a 6 6 6 c k 为 你解决复杂难题! 437

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

下一篇: SpringBoot自定义错误页面
weixin_44533475
博客等级 码龄8年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值