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

2023-01-21 0 2,824

目录

我们今天使用SpringBoot来整合SpringSecurity来吧不多BB

首先呢,是一个SpringBoot 项目连接数据库,这里我使用的是mybaties.mysql, 下面是数据库的表

DROP TABLE IF EXISTS `xy_role`;
 
CREATE TABLE `xy_role` (
  `xyr_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `xyr_name` char(30) DEFAULT NULL COMMENT '角色名称',
  PRIMARY KEY (`xyr_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='角色';
 
/*Data for the table `xy_role` */
 
insert  into `xy_role`(`xyr_id`,`xyr_name`) values 
 
(1,'ROLE_SUPERADMIN'),
 
(2,'网站管理员'),
 
(3,'ROLE_SHOPADMIN');
 
 
DROP TABLE IF EXISTS `xy_webadmin`;
 
CREATE TABLE `xy_webadmin` (
  `xywb_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `xywb_username` char(30) DEFAULT NULL COMMENT '用户名',
  `xyr_id` int(11) DEFAULT NULL COMMENT '角色',
  `xywb_password` char(50) DEFAULT NULL COMMENT '密码',
  `xywb_registertime` bigint(20) DEFAULT NULL COMMENT '注册时间',
  PRIMARY KEY (`xywb_id`),
  KEY `FK_Reference_37` (`xyr_id`),
  CONSTRAINT `FK_Reference_37` FOREIGN KEY (`xyr_id`) REFERENCES `xy_role` (`xyr_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='网站管理员';
 
/*Data for the table `xy_webadmin` */
 
insert  into `xy_webadmin`(`xywb_id`,`xywb_username`,`xyr_id`,`xywb_password`,`xywb_registertime`) values 
 
(1,'haiwei',1,'123456',1983),
 
(2,'admin',3,'123456',1983),
 
(3,'admin1',2,'123456',NULL);

表创建完了之后呢, 我们就开始写代码了

第一步

我们要创建spring security 的配置文件, 因为代码太长,所以我就直接截图了, 小伙伴们不要想着COPY代码哦,要自己手写代码

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

然后是一个实现了UserDetialsServer的类

这个类主要是实现了loadUserByname方法, 然后我们可以在这个类中注入我们的service 或者直接mapper接口, 然后方法内部根据username获得该用户, 然后再获取这个用户的权限

第二步是封装一个自定义的类

该类实现了UserDetials 接口, 然后里面有用户对象, 角色对象(也可以是一个角色泛型的list集合)这个自定义的类实现了这个几个方法

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

最重要的是第一个方法, 他会吧当前用户的角色存起来, 只有两段代码 我就不多说了, 下面就是一些账户密码可不可用什么的。

再回头来说我们的loadUserByName方法, 我们把角色和用户都set到这个类里面,然后返回。

这个一步只是验证有没有这个用户,或者是这个账户能不能用

第三步, 我们需要判断密码啦

一个实现了AuthenticationProvider的类, 注入我们的CustmUserService, 然后从Authentication取得账号和密码,调用loadUserByName方法获得账户信息, 再和页面输入的密码进行比对, 如果不能用就抛异常, 如果能用的活,就把账户,账户密码, 账户权限(角色)构建成UsernamePasswordAuthenticationToken返回, 

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

下面是我的登录页面代码

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

这就完成了登录功能, 小伙伴们,一定要先按照我的代码写。 然后再自己去写(因为有些东西说的不详细)

然后我们再看权限功能

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

/test1 是只有super_admin才能访问的, /test2 是只有shopping_admin才能访问的(是有缺点的)

当然这里的话 是这样写就行, 我们再看页面上的

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

这里其实是有坑的, 为什么呢, 我们debug查看hasRole的源码

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

在我标箭头的这里, 如果你网页上写的参数不带ROLE_的话,他会强制给你加上, 然后如果你数据库里面的角色是admin,网页里面写的也是admin, 在这个就会用admin和ROLE_admin 匹配, 然后就不行

我的解决方法目前有两种: 1.数据库里面的角色就加上ROLE_ 

                                            2. 添加角色时加上ROLE_

还有个问题就是第一张图那个的hasRole不能加ROLE_, 如果加了就会报错, 第一个加了没错, 第二个加了就报错了

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

那么该用第几种方法呢?

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 SpringBoot如何整合Springsecurity实现数据库登录及权限控制 http://www.20zxx.cn/462937/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务