博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Security教程(三)
阅读量:5248 次
发布时间:2019-06-14

本文共 2875 字,大约阅读时间需要 9 分钟。

在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项目对用户信息和权限信息管理的要求。那么接下来就讲解如何自定义数据库实现对用户信息和权限信息的管理。

一 自定义表结构

这里还是用的mysql数据库,所以pom.xml文件都不用修改。这里只要新建三张表即可,user表、role表、user_role表。其中user用户表,role角色表为保存用户权限数据的主表,user_role为关联表。user用户表,role角色表之间为多对多关系,就是说一个用户可以有多个角色。ER图如下所示:

建表语句:

-- 角色create table role(    id bigint,    name varchar(50),    descn varchar(200));alter table role add constraint pk_role primary key(id);alter table role alter column id bigint generated by default as identity(start with 1);-- 用户create table user(    id bigint,    username varchar(50),    password varchar(50),    status integer,    descn varchar(200));alter table user add constraint pk_user primary key(id);alter table user alter column id bigint generated by default as identity(start with 1);-- 用户角色连接表create table user_role(    user_id bigint,    role_id bigint);alter table user_role add constraint pk_user_role primary key(user_id, role_id);alter table user_role add constraint fk_user_role_user foreign key(user_id) references user(id);alter table user_role add constraint fk_user_role_role foreign key(role_id) references role(id);插入数据:insert into user(id,username,password,status,descn) values(1,'admin','admin',1,'管理员');insert into user(id,username,password,status,descn) values(2,'user','user',1,'用户');insert into role(id,name,descn) values(1,'ROLE_ADMIN','管理员角色');insert into role(id,name,descn) values(2,'ROLE_USER','用户角色');insert into user_role(user_id,role_id) values(1,1);insert into user_role(user_id,role_id) values(1,2);insert into user_role(user_id,role_id) values(2,2);

  

二 修改Spring Security的配置文件(applicationContext.xml)

现在我们要在这样的数据结构基础上使用Spring Security,Spring Security所需要的数据无非就是为了处理两种情况,一是判断登录用户是否合法,二是判断登陆的用户是否有权限访问受保护的系统资源。因此我们所要做的工作就是在现有数据结构的基础上,为Spring Security提供这两种数据。

在jdbc-user-service标签中有这样两个属性:

1. users-by-username-query为根据用户名查找用户,系统通过传入的用户名查询当前用户的登录名,密码和是否被禁用这一状态。

2.authorities-by-username-query为根据用户名查找权限,系统通过传入的用户名查询当前用户已被授予的所有权限。

同时通过代码提示能看到这两个属性的sql语句格式:

从图中可以看到第一个属性要的是通过username来查询用户名、密码和是否可用;第二个属性是通过username来查询用户权限,所以在我们自定义的表结构的基础上对sql语句进行修改,得到如下语句:

select username,password,status as enabled from user where username = ?

  

select user.username,role.name from user,role,user_role 	where user.id=user_role.user_id and 	user_role.role_id=role.id and user.username=?

  这样最终得到的配置文件如下:

  其他的文件和配置和教程二()完全一样,请参考教程二

 

三 结果

由于只是换了用户信息和权限信息保存的方式,其他的都没有改变,效果和 的效果是一样的。

 

---------------------
作者:AirMario
来源:CSDN
原文:https://blog.csdn.net/AirMario/article/details/53976993

转载于:https://www.cnblogs.com/ryelqy/p/10271443.html

你可能感兴趣的文章
qt字符数组转ASCII(十六进制)
查看>>
学习笔记21—PS换图片背景
查看>>
electron入门心得
查看>>
实现一个简单实用的动态加载上千条目的UGUI模块
查看>>
格而知之2:UIView的autoresizingMask属性探究
查看>>
Spring3.0 AOP 具体解释
查看>>
我的Hook学习笔记
查看>>
EasyUI DataGrid 中字段 formatter 格式化不起作用
查看>>
海量数据存储
查看>>
js中的try/catch
查看>>
[导入]玫瑰丝巾!
查看>>
自动从网站上面下载文件 .NET把网站图片保存到本地
查看>>
【识记】 域名备案
查看>>
STL uva 11991
查看>>
MY SQL的下载和安装
查看>>
自定义OffMeshLink跳跃曲线
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
简述spring中常有的几种advice?
查看>>
牛客网——华为机试(题21:简单密码)(Java)
查看>>
学习Redux之分析Redux核心代码分析
查看>>