栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

Spring Security笔记:使用数据库进行用户认证

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Security笔记:使用数据库进行用户认证

在前一节,学习了如何自定义登录页,但是用户名、密码仍然是配置在xml中的,这样显然太非主流,本节将学习如何把用户名/密码/角色存储在db中,通过db来实现用户认证

一、项目结构

与前面的示例相比,因为要连接db,所以多出了一个spring-database.xml用来定义数据库连接,此外,为了演示登录用户权限不足的场景,加了一个页面403.jsp,用来统一显示权限不足的提示信息

二、数据库表结构(oracle环境)

 1 create table T_USERS
 2 (
 3   d_username VARCHAr2(50) not null,
 4   d_password VARCHAr2(60),
 5   d_enabled  NUMBER(1)
 6 );
 7 alter table T_USERS
 8   add constraint PK_USERS_USERNAME primary key (D_USERNAME) ;
 9   
10 create table T_USER_ROLES
11 (
12   d_user_role_id NUMBER(10) not null,
13   d_username     VARCHAr2(50),
14   d_role         VARCHAr2(50)
15 );
16 alter table T_USER_ROLES
17   add constraint PK_USER_ROLES primary key (D_USER_ROLE_ID);
18 alter table T_USER_ROLES
19   add constraint IDX_UNI_ROLE_USERNAME unique (D_USERNAME, D_ROLE);

这里创建了二张表,一张用来保存用户名/密码,另一张用来保存用户所属的权限角色,表名和字段名无所谓,可以随便改,但是用户表中,必须要有"用户名/密码/帐号的有效状态"这三列信息,权限角色表必须要有“用户名/权限角色”这二列信息

再insert几条测试数据

 1 insert into T_USERS (D_USERNAME, D_PASSWORD, D_ENABLED)
 2 values ('YJMYZZ', '123456', 1);
 3 
 4 insert into T_USERS (D_USERNAME, D_PASSWORD, D_ENABLED)
 5 values ('MIKE', 'MIKE123', 1); 
 6 
 7 insert into T_USER_ROLES (D_USER_ROLE_ID, D_USERNAME, D_ROLE)
 8 values (1, 'MIKE', 'POWER');
 9 
10 insert into T_USER_ROLES (D_USER_ROLE_ID, D_USERNAME, D_ROLE)
11 values (2, 'YJMYZZ', 'ADMIN');
12 
13 insert into T_USER_ROLES (D_USER_ROLE_ID, D_USERNAME, D_ROLE)
14 values (3, 'YJMYZZ', 'POWER');

这里插入了二个用户YJMYZZ/MIKE,而且MIKE属于POWER组,YJMYZZ同时属于POWERADMIN二个权限组

三、spring-security.xml

 1 
 7 
 8     
 9         
10         
11         
12         
21         
26 
27         
28             
29                 User : ${pageContext.request.userPrincipal.name} |  Logout | admin
31             
32         
33     
34 
35     
36         
37         
38             login
39         
40     
41 
42 
43 

注意一下:14、27、35这三行,它们演示了如何在jsp端判断用户具有的角色权限、是否已登录等用法

403.jsp

 1 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 2 
 3 
 4     HTTP Status 403 - Access is denied
 5 
 6     
 7         
 8             You do not have permission to access this page!
 9         
10         
11             
12                 Username : ${username}  You do not have permission to access
13                 this page!
14             
15         
16     
17 
18 
19 

admin.jsp

 1 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 2 <%@page session="true"%>
 3 
 4 
 5     Title : ${title}
 6     Message : ${message}
 7 
 8     
 9     
13     
18 
19     
20         
21             Welcome : ${pageContext.request.userPrincipal.name} |  Logout | welcome
23         
24     
25 
26 
27 

因为在xml中已经配置了/admin开头的请求url,必须具有ADMIN角色权限,所以admin.jsp端反而不用任何额外的判断了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/235584.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号