spring security使用数据库管理用户权限

spring security使用数据库管理用户权限,第1张

概述<authentication-provider><user-service><user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" /><user name="user" password="user" authorities="ROLE_USER" /></user-service></authentication-provider>将上述配置代码配置为<authentication-provider><jdbc-user-service data-source-ref="dataSource"/></authentication-provider>现在只要再为jdbc-user-service提供一个dataSource就可以让Spring Security使用数据库中的权限信息了。在此我们使用spring创建一个演示用的dataSource实现,这个dataSource会连接到hsqldb数据库,从中获取用户权限信息。[1]<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><beans:property name="driverClassName" value="org.hsqldb.jdbcDriver"/><beans:property name="url" value="jdbc:hsqldb:res:/hsqldb/test"/><beans:property name="username" value="sa"/><beans:property name="password" value=""/></beans:bean>最终的配置文件如下所示:<?xml version="1.0" encoding="UTF-8"?><beans:beans xmlns="http://www.springframework.org/schema/security"xmlns:beans="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/securityhttp://www.springframework.org/schema/security/spring-security.xsd"><http auto-config='true'><intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" /><intercept-url pattern="/**" access="ROLE_USER" /></http><authentication-manager><authentication-provider><jdbc-user-service data-source-ref="dataSource"/></authentication-provider></authentication-manager>//连接数据库<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><beans:property name="driverClassName" value="org.hsqldb.jdbcDriver"/><beans:property name="url" value="jdbc:hsqldb:res:/hsqldb/test"/><beans:property name="username" value="sa"/><beans:property name="password" value=""/></beans:bean></beans:beans>数据库表结构Spring Security默认情况下需要两张表,用户表和权限表。以下是hsqldb中的建表语句:create table users(1username varchar_ignorecase(50) not null primary key,password varchar_ignorecase(50) not null,enabled boolean not null);create table authorities (2username varchar_ignorecase(50) not null,authority varchar_ignorecase(50) not null,constraint fk_authorities_users foreign key(username) references users(username));create unique index ix_auth_username on authorities (username,authority);31.users:用户表。包含username用户登录名,password登陆密码,enabled用户是否被禁用三个字段。其中username用户登录名为主键。 2.authorities:权限表。包含username用户登录名,authorities对应权限两个字段。其中username字段与users用户表的主键使用外键关联。3.对authorities权限表的username和authority创建唯一索引,提高查询效率Spring Security会在初始化时,从这两张表中获得用户信息和对应权限,将这些信息保存到缓存中。其中users表中的登录名和密码用来控制用户的登录,而权限表中的信息用来控制用户登陆后是否有权限访问受保护的系统资源。我们在示例中预先初始化了一部分数据:insert into users(username,password,enabled) values('admin','admin',true);insert into users(username,password,enabled) values('user','user',true);insert into authorities(username,authority) values('admin','ROLE_ADMIN');insert into authorities(username,authority) values('admin','ROLE_USER');insert into authorities(username,authority) values('user','ROLE_USER');这个实现和之前将用户和用户权限写在配置文件中明显方便很多。尤其是用户数量过多时。不过这种方法是保持最基本的表结构,也是默认的表结构。最好在理解原理基础上自定义数据库。(方法后续讲到。)

<div >

             password= authorities= />         password= authorities= />    

将上述配置代码配置为

=/>

现在只要再为jdbc-user-service提供一个dataSource就可以让Spring Security使用数据库中的权限信息了。在此我们使用spring创建一个演示用的dataSource实现,这个dataSource会连接到hsqldb数据库,从中获取用户权限信息。[]

=> value=/> value=/> value=/> value=/>

最终的配置文件如下所示:

enCoding=?>=== http: http: http:
<<a href="https://m.jb51.cc/tag/http/" target="_blank" >http</a> <a href="https://m.jb51.cc/tag/auto/" target="_blank" >auto</a>-con<a href="https://www.jb51.cc/tag/fig/" target="_blank" >fig</a>=<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;'</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;true</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;'</span>>    <intercept-url pattern=<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;/<a href="https://m.jb51.cc/tag/admin/" target="_blank" >admin</a>.<a href="https://m.jb51.cc/tag/Js/" target="_blank" >Js</a>p</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span> access=<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;R<a href="https://m.jb51.cc/tag/ol/" target="_blank" >ol</a>E_<a href="https://m.jb51.cc/tag/admin/" target="_blank" >admin</a></span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span> />    <intercept-url pattern=<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;/**</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span> access=<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;R<a href="https://m.jb51.cc/tag/ol/" target="_blank" >ol</a>E_USER</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span> /></http><authentication-manager>    <authentication-provider>        <jdbc-user-service data-source-<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;ref</span>=<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;dataSource</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span>/>    </authentication-provider></authentication-manager>

//连接数据库
<beans:bean ID=<span >"<span >dataSource<span >" <span >class=<span >"<span >org.springframework.jdbc.datasource.DriverManagerDataSource<span >">
<beans:property name=<span >"<span >driverClassname<span >" value=<span >"<span >org.hsqldb.jdbcDriver<span >"/>
<beans:property name=<span >"<span >url<span >" value=<span >"<span >jdbc:hsqldb:res:/hsqldb/test<span >"/>
<beans:property name=<span >"<span >username<span >" value=<span >"<span >sa<span >"/>
<beans:property name=<span >"<span >password<span >" value=<span >""/>

Spring Security默认情况下需要两张表,用户表和权限表。以下是hsqldb中的建表语句:

create table users(150) not 50) not not create table authoritIEs (2<span >
username varchar_ignorecase(
50) not <span >null
<span >,authority varchar_ignorecase(
50) not <span >null
<span >,constraint fk_authoritIEs_users foreign key(username) references users(username)
);

create unique index ix_auth_username on authoritIEs (username,authority);3

1.users:用户表。包含username用户登录名,password登陆密码,enabled用户是否被禁用三个字段。

其中username用户登录名为主键。

 

2.authoritIEs:权限表。包含username用户登录名,authoritIEs对应权限两个字段。

其中username字段与users用户表的主键使用外键关联。

3.对authoritIEs权限表的username和authority创建唯一索引,提高查询效率

Spring Security会在初始化时,从这两张表中获得用户信息和对应权限,将这些信息保存到缓存中。其中users表中的登录名和密码用来控制用户的登录,而权限表中的信息用来控制用户登陆后是否有权限访问受保护的系统资源。

我们在示例中预先初始化了一部分数据:

insert into users(username,password,enabled) values('admin','admin','user','user',insert into authoritIEs(username,authority) values('admin','RolE_admin'<span >);
insert into authoritIEs(username,'RolE_USER'<span >);
insert into authoritIEs(username,authority) values(
'user','RolE_USER');

这个实现和之前将用户和用户权限写在配置文件中明显方便很多。尤其是用户数量过多时。不过这种方法是保持最基本的表结构,也是默认的表结构。最好在理解原理基础上自定义数据库。(方法后续讲到。)

总结

以上是内存溢出为你收集整理的spring security使用数据库管理用户权限全部内容,希望文章能够帮你解决spring security使用数据库管理用户权限所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1270002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存