上面的一个 Spring Security 的 demo 虽然使用了数据库来实现权限的控制,但是对于在项目中的应用来说这样的表结构过于简单,远远无法满足我们的需求。现在来实现自定义数据表从而达到权限的控制。下面给出创建自定义数据表的SQL(MySQL)语句。
SQL语句:
-- 角色
create table role(
id bigint,
name varchar(50),
descn varchar(200)
);
ALTER TABLE `role` MODIFY COLUMN `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);
-- 用户
create table user(
id bigint,
username varchar(50),
password varchar(50),
status integer,
descn varchar(200)
);
ALTER TABLE `user` MODIFY COLUMN `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);
-- 用户角色连接表
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的配置:
<?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/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<!-- 指定被拒绝的页面 -->
<http auto-config='true' access-denied-page="/accessDenied.jsp">
<!--
login-page表示用户登陆时显示我们自定义的login.jsp
authentication-failure-url表示用户登陆失败时,跳转到哪个页面,并添加一个error=true参数作为登陆失败的标示
default-target-url表示登陆成功时,跳转到哪个页面
-->
<form-login login-page="/login.jsp"
authentication-failure-url="/login.jsp?error=true"
default-target-url="/index.jsp"
/>
<!--登录页面不进行过滤,后面加一个*那是因为请求页面后面会带参数-->
<intercept-url pattern="/login.jsp*" filters="none"/>
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
<!-- 检测失效的sessionId,超时时定位到另外一个URL -->
<session-management invalid-session-url="/sessionTimeout.jsp" >
<!--
防止第二次登录
如果想让第一次登录失效第二次登录启用则不要配置error-if-maximum-exceeded="true"
-->
<concurrency-control max-sessions="1" error-if-maximum-exceeded="true"/>
</session-management>
</http>
<authentication-manager>
<authentication-provider>
<!--
(1) users-by-username-query:根据条件用户名查找用户的:username,passwd和enabled状态;
(2) authorities-by-username-query: 根据条件用户名查找用户被授予的权限;
-->
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="SELECT username,password,status as enabled FROM user where username=?"
authorities-by-username-query="select u.username,r.name as authority
from user u
join user_role ur
on u.id=ur.user_id
join role r
on r.id=ur.role_id
where u.username=?"
/>
</authentication-provider>
</authentication-manager>
<!-- 国际化 -->
<beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 如果不加载自己的国际化文件,去加载 Security 内部的国际化文件classpath:org/springframework/security/messages_zh_CN -->
<beans:property name="basename" value="classpath:messages_zh_CN"/>
</beans:bean>
</beans:beans>
关键的配置在此:
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="SELECT username,password,status as enabled FROM user where username=?"
authorities-by-username-query="select u.username,r.name as authority
from user u
join user_role ur
on u.id=ur.user_id
join role r
on r.id=ur.role_id
where u.username=?"
/>
在上一个的例子基础之上进行如下的配置,运行程序达到自定义user用户表与role角色表,并通过两张表的中间表进行关联实现权限控制。
分享到:
相关推荐
Spring Security是一个功能强大且可高度定制的身份验证和访问控制...Spring Security Reference作为官方文档,是学习和应用Spring Security的重要资源,建议深入研究以充分利用其提供的功能来增强应用程序的安全性。
通过阅读和理解这些源代码,你将能够深入理解Spring Security的工作原理,以及如何根据需求定制和扩展其功能。 总之,Spring Security的初步搭建是学习其核心机制的关键步骤。通过注释详尽的源码,你可以逐步掌握...
Spring Security 是一个强大的安全框架,用于为Java应用提供身份验证和授权服务。在这个"Spring Security 项目配置...通过逐步研究和运行项目,你可以掌握Spring Security的基础知识,并为未来的安全开发打下坚实基础。
通过深入研究这个入门demo,开发者可以逐步了解并掌握Spring Security的强大功能,从而能够为自己的应用程序构建出健壮且安全的访问控制机制。无论是对于Web应用还是RESTful API,Spring Security都能提供全面的解决...
下面我们将深入探讨Spring Security的核心概念、功能以及它如何处理静态资源的保护。 1. **Spring Security简介** Spring Security 是Spring生态系统中的一个组件,用于提供认证(Authentication)和授权...
教程链接提及的CSDN博客文章提供了详细的步骤,指导我们逐步创建一个基本的Spring Security应用。 首先,我们需要在项目中引入Spring Security的依赖。这通常通过Maven或Gradle来完成,将相应的依赖项添加到构建...
在压缩包文件"SpringSecurity3"中,可能包含了以下内容: - `spring-security.xml`:这是主要的配置文件,包含了上述提到的所有配置。 - `web.xml`:可能包含了Spring Security过滤器链的配置,以便在Web应用启动时...
Spring Security 是一个强大的Java安全框架,它为Spring...每个章节都专注于特定主题,可以帮助读者逐步构建对Spring Security的深入理解。在实践中,结合源代码和书籍的解释,将有助于快速掌握这个强大的安全框架。
本文将从零开始,逐步解析Spring Security的核心概念、配置和实际应用。 一、Spring Security简介 Spring Security是Spring生态体系中的一个核心组件,它为Java应用程序提供了灵活且可扩展的安全管理框架。Spring ...
本笔记将深入探讨Spring Security的核心概念、配置以及如何在实际项目中应用。 一、Spring Security核心概念 1. **身份验证(Authentication)**:这是验证用户身份的过程。Spring Security提供了多种方式来实现,...
这个教程通常会涵盖一系列逐步指导,解释如何配置和使用Spring Security的各种特性。开发者可以通过阅读源码来了解如何设置安全拦截器、定义权限、实现自定义认证和授权机制等。其中可能包括了Web安全配置、基于内存...
对于初学者,建议从官方文档或教程开始学习,逐步熟悉Spring Security的安装、配置和使用流程。 #### Security命名空间配置 Spring Security通过XML命名空间简化了安全相关的配置。这部分文档详细介绍了如何使用...
这个"spring security demo"是逐步构建的一个示例项目,展示了如何逐步配置和增强Spring Security的功能。让我们深入了解一下这些压缩包中的知识点。 首先,我们来看"第一版简单策略-用户采用配置的形式.rar"。在这...
### Spring Security 帮助文档知识点总结 #### 一、概览 - **Spring Security**:Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架。它为开发者提供了多种方式来保护应用程序,并且可以非常灵活...
《Spring Security 2.0深度解析》 Spring Security是一款强大的安全框架,用于处理Java应用程序的安全需求,特别是...在实际开发中,可以参考博客链接中的内容,结合官方文档,逐步探索和掌握Spring Security的精髓。
随着版本的迭代,Spring Security不断完善和更新,逐步发展成为一个功能强大的安全框架。 关于Spring Security的版本命名,它是遵循语义化版本控制的。从3.1.6版本来看,这个数字代表了主要版本号、次版本号以及...
SpringSecurity是Java开发中一个强大的安全框架,用于处理应用程序的安全性。它提供了全面的身份验证、授权和会话管理功能...学习过程中,建议结合官方文档和示例代码,逐步实践,以便更好地掌握SpringSecurity的精髓。
Spring Security 是一个强大的安全框架,...通过以上步骤,你可以逐步掌握Spring Security的基础知识,进而能够构建一个安全、功能完善的登录系统。不断实践和探索,将有助于你在Spring Security的学习之路上更进一步。
在深入探讨Spring Security之前,我们首先需要理解它的一些核心概念。 1. **身份验证(Authentication)**:这是确认用户身份的过程。Spring Security提供了多种方式来实现身份验证,包括用户名/密码、令牌、X.509...
本资源文件包含了关于SpringSecurity的深入学习资料,帮助开发者掌握这一核心安全技术。 SpringSecurity的核心概念主要包括以下几个方面: 1. **认证(Authentication)**:这是确认用户身份的过程。在Spring...