- 浏览: 260104 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (87)
- Java (6)
- Frameworks (1)
- JavaWeb (3)
- Spring (6)
- Hibernate (26)
- Maven (2)
- Plugin (1)
- Velocity (1)
- Freemarker (1)
- Spring security (18)
- Google (5)
- Guice (5)
- rmi (1)
- Annotation (1)
- Binding (1)
- commons-fileupload (3)
- fileupload (3)
- ehcache (1)
- ApplicationContext (1)
- Resource (1)
- Validator (1)
- PropertyEditor (1)
- one-to-many (5)
- cascade (2)
- MessageSource (1)
- Serialize (1)
- Serializable (1)
- delete (1)
- delete-orphan (1)
- fetch (1)
- one-to-one (1)
- join (4)
- DomainObject (1)
- CRUD (1)
- composite-element (1)
- Hibernate ORM (14)
- dynamic-insert (1)
- dynamic-update (1)
- Search (1)
- DDD (0)
- Job (0)
- element (1)
- Unique (1)
- Group (1)
- tomcat (1)
- https (1)
- mysql (1)
最新评论
-
xurunchengof:
[url][url][url][img][img][img][ ...
Spring Security 3多用户登录实现之三 验证过滤器 -
Wind_ZhongGang:
yo8237233 写道你这样的话如果上传文件超过了50000 ...
Spring集成Commons fileupload,文件上传 -
yo8237233:
你这样的话如果上传文件超过了50000000就会报异常
Spring集成Commons fileupload,文件上传 -
zhuzhiguosnail:
Wind_ZhongGang 写道lianglaiyang 写 ...
Spring Security 3多用户登录实现一 -
曾老师:
?????
Spring Security 3用户登录实现之十 用户切换
关于安全性服务,有两个重要的概念需要理解,一是认证,即判断用户是否在应用程序中存在,二是授权,即判断用户是否有权限访问资源。
Spring security为我们提供的HTTP Basic,Digest等认证服务,因为要在配置文件中对用户和权限进行配置,所以局限性很强。除此之外,它还允许我们在数据库中对用户和权限进行配置。那么如何实现呢?
在系统中定义用户,角色,权限这三种实体,一个用户可以拥有多个角色,一个角色可以被多个用户拥有,所以用户与角色之间是多对多的关系,为了易于理解,这里加入第三种实体权限,作为用户和角色的中间关联实体,把用户与角色间的多对多关系拆为两个一对多的关联关系。这样一个用户就对应着多个权限,一个权限对应着一个用户,而一个角色对应着多个权限,一个权限对应着一个角色。
一。User.java
package com.template.security; import java.util.List; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-7-28 * Time: 下午9:46 * To change this template use File | Settings | File Templates. */ public class User { private Integer id; private String username; private String password; private Boolean enabled; private List<Authority> authorities; public User() { } }
二。User.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-access="field"> <class name="com.template.security.User" table="user" dynamic-insert="true" dynamic-update="true"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"/> </id> <property name="username" column="username" type="java.lang.String"/> <property name="password" column="password" type="java.lang.String"/> <property name="enabled" column="enabled" type="java.lang.Boolean"/> <bag name="authorities"> <key column="userid"/> <one-to-many class="com.template.security.Authority"/> </bag> </class> </hibernate-mapping>
三。Role.java
package com.template.security; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-7-28 * Time: 下午9:47 * To change this template use File | Settings | File Templates. */ public class Role { private Integer id; private String name; public Role() { } }
四。Role.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-access="field"> <class name="com.template.security.Role" table="role" dynamic-insert="true" dynamic-update="true"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"/> </id> <property name="name" column="name" type="java.lang.String"/> </class> </hibernate-mapping>
五。Authority.java
package com.template.security; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-7-28 * Time: 下午9:47 * To change this template use File | Settings | File Templates. */ public class Authority { private Integer id; private User user; private Role role; public Authority() { } }
六。Authority.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-access="field"> <class name="com.template.security.Authority" table="authority" dynamic-insert="true" dynamic-update="true"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"/> </id> <many-to-one name="user" column="userid" class="com.template.security.User"/> <many-to-one name="role" column="roleid" class="com.template.security.Role"/> </class> </hibernate-mapping>
七。security.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"> <beans:import resource="datasource.xml"/> <http use-expressions="true"> <intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" requires-channel="http"/> <form-login/> <remember-me/> </http> <authentication-manager> <authentication-provider> <jdbc-user-service data-source-ref="dataSource" users-by-username-query="select username,password,enabled as status from user where username=?" authorities-by-username-query="select u.username,r.name as authority from user u join authority a on a.userid=u.id join role r on r.id=a.roleid where u.username=?"/> </authentication-provider> </authentication-manager> </beans:beans>
这里需要重点了解这样几个元素。第一个就是jdbc-user-service,这是用来配置利用数据库进行用户权限认证服务的,data-source-ref则是用来说明使用的数据库连接等相关属性,users-by-username-query则是认证用户使用的,
authorities-by-username-query则是获取用户授权的,intercept-url可以用来定义要保护的访问路径,当然如果配置文件中有多个intercept-url,其中有些是重复的,那么Spring会以位置最靠上的作为标准来判断,access则定义了哪些角色可以访问,还有其它一些属性以后再做进一步理解,现在这些已经够用了。只要做到认证和授权,那么我们的安全框架也就基本搭建完成了。
八。data.ddl
INSERT INTO user(id,username,password,enabled) VALUES (1,"ZhongGang","ZhongGang",true); INSERT INTO user(id,username,password,enabled) VALUES (2,"GangGang","GangGang",true); INSERT INTO user(id,username,password,enabled) VALUES (3,"ZhongZhong","ZhongGang",false); INSERT INTO role(id,name) VALUES (1,"ROLE_ADMIN"); INSERT INTO role(id,name) VALUES (2,"ROLE_SUPERUSER"); INSERT INTO authority(id,userid,roleid) VALUES (1,1,1); INSERT INTO authority(id,userid,roleid) VALUES (2,2,2); INSERT INTO authority(id,userid,roleid) VALUES (3,3,1);
这是我使用的模拟数据。
当然这里需要在web.xml里面配置springSecurityFilterChain,可以参见我的另一篇博文Spring security HTTP Basic。
发表评论
-
Spring Security 之 Session Management
2013-01-06 11:43 5562Spring Security为我们提供了Sess ... -
Spring Security 之 Digest Authentication
2013-01-04 16:22 0<?xml version=" ... -
Spring Security 之 Basic Authentication
2013-01-04 11:58 2018Spring Security实现Basic A ... -
Spring Security 3用户登录实现之十二 授权判断
2012-11-29 15:38 2207Spring Security在验证用户登录后的另 ... -
Spring Security 3多用户登录实现之十一 退出
2012-11-19 21:41 2626Spring Security的退出功能由Logou ... -
Spring Security 3用户登录实现之十 用户切换
2012-11-17 18:15 6266部分情况下用户希望能够在不知道其它用户账号及密码的 ... -
Spring Security 3多用户登录实现之九 基于持久化存储的自动登录
2012-11-17 00:40 6279Spring Security实现自动登录的基本流 ... -
Spring Security 3多用户登录实现之八 基于Cookie的自动登录
2012-11-15 22:44 10996Spring Security为我们提供了两种方式的自 ... -
Spring Security 3多用户登录实现之七 用户验证失败处理改进
2012-11-11 11:24 8899验证登录失败后的处理的常见处理是返回到登录页面,并 ... -
Spring Security 3多用户登录实现之六 用户验证后处理
2012-11-11 00:42 4166验证用户后主要有这样两种走向,一种是验证失败,一种 ... -
Spring Security 3多用户登录实现之五 验证用户凭证
2012-11-11 00:42 4897有了用户凭证后, 如何验证用户的凭证是否正确呢, 这就需 ... -
Spring Security 3多用户登录实现之四 用户凭证
2012-11-10 20:00 5070前讲讲到AuthenticationFilt ... -
Spring Security 3多用户登录实现之三 验证过滤器
2012-11-10 19:58 15106当填写完成登录表单提交后,首先会被对应的提交表单提起 ... -
Spring Security 3多用户登录实现之二 多登录界面展示
2012-11-10 19:58 9728接前讲,首先针对一个多种用户类型的登录需求,需要先 ... -
Spring Security 3多用户登录实现一
2012-11-10 19:57 4966使用Spring Security 3 来实现多种 ... -
Spring security customize password encoder
2011-07-29 22:21 2357Spring security为我们 ... -
Spring security防用户重复登录
2011-07-28 23:28 3907使用Spring security如何防止用户的重复登录呢 ... -
Spring security HTTP Basic认证
2011-07-27 21:54 5256Spring security框架集成了多种流行的安全认证 ...
相关推荐
Spring Security 基于数据库的权限管理配置
项目自身的权限信息结合spring security 框架的实现。 本DEMO只包括从数据库读取登录认证信息,认证通过后 从数据库读取授权信息来控制用户的访问.权限元素包括 用户,角色,菜单以及这三者的关系。 本DEMO使用了...
springboot springsecurity动态权限控制,实现数据库动态管理菜单权限
Spring-Security权限sql角色与菜单的数据库信息
在开源的SpringSide上作权限控制的demo,附带数据库。分层清晰,设计合理,系统松散耦合。结合业界流行的安全框架精心设计开发。
SSM框架中使用spring_security实现不同用户之间的权限管理。简单的xml配置入门,连接MySQL数据库进行权限匹配管理,以及对使用spring_security自身BCryptPasswordEncoder类进行加密后的登录处理。
Spring Security 安全实例-数据库应用(用户从数据库中获取) 添加了从数据库中获取用户信息、角色信息、用户权限信息
基于springboot+SpringSecurity的一款权限认证系统源码+数据库.zip基于springboot+SpringSecurity的一款权限认证系统源码+数据库.zip基于springboot+SpringSecurity的一款权限认证系统源码+数据库.zip基于springboot...
后端使用SpringBoot框架进行业务逻辑开发,利用Spring Security实现权限控制。数据库采用MySQL进行数据存储,使用MyBatis进行数据访问。 权限控制模块设计包括用户、角色和权限三个主要模块。用户模块用于管理用户...
(1)该项目是基于spring3+struts2+hibernate3+spring security3的权限管理项目 (2)后台我已经实现了权限管理,包括用户,角色和资源的分配。前台实现了spring security3的管理 (3)网上案例普遍是后台单一登陆。...
2、使用数据库管理用户权限 3、自定义认证数据库表结构 4、自定义登录页面 5、使用数据库管理资源 6、控制用户信息 MD5加密 获取当前用户信息 7、自定义访问拒绝页面 8、动态管理资源结合自定义登录页面 9、 ...
SpringBoot+SpringSecurity整合示例代码,实现了从数据库中获取信息进行登录认证和权限认证。 本项目为idea工程,请用idea2019导入(老版应该也可以)。 本项目用户信息所需sql文件,在工程的resources文件夹下,...
spring-boot-security-添加数据库-注册用户添加权限 spring-boot-security-添加数据库-注册用户添加权限 spring-boot-security-添加数据库-注册用户添加权限 spring-boot2.0
通过修改spring security源代码实现动态权限管理。用户信息、角色信息和资源信息保存在数据库中,可动态配置权限,不用重新启动服务。改完即时生效,付例子
SpringBoot集成Spring Security实现权限控制【完整源码+数据库】 适合刚接触Spring Security的初学者,或者想要加深对Spring Security理解的开发人员
springsecurity(用spring ibatis freemaker)实现的权限管理页面, 里头包括数据库脚本和原代码 主要参考http://blog.csdn.net/k10509806/article/details/6369131 这个人的文章做的
5)匹配用户拥有权限和请求权限(MyAccessDecisionManager:decide),如果用户没有相应的权限, 执行第6步,否则执行第7步。 6)登录 7)验证并授权(MyUserDetailServiceImpl:loadUserByUsername) 内附完整数据库
前者是将配置文件或数据库中存储的资源(url)提取出来加工成为url和权限列表的Map供Security使用,后者提取用户名和权限组成一个完整的(UserDetails)User对象,该对象可以提供用户的详细信息供AuthentationManager...
spring security3.1 在数据库实现 用户 角色 资源 权限控制,在eclipse+tomcat下测试通过
spring security3案例,基于数据库存储角色权限资源信息,支持记住我、session并发控制、AJAX调用。