用数据库中的用户跟角色替换spring-security.xml中的用户名和角色,这里我用hibernate框架来获取数据库中的用户名和角色

详情请看附件

1.先将hibernate的环境整合进来

2.创建一个数据库security,执行security.sql

3.修改spring-security.xml,采用数据库的方式读取用户跟角色

<!-- 认证管理器,配置了管理员与角色的关系  -->
<security:authentication-manager>
<!-- 配置账号密码所属的角色 角色以 ROLE_开头,为spring获取名称的标识 -->
<security:authentication-provider user-service-ref="accountService">
<!-- 采用xml的方式
<security:user-service>
<security:user name="user" password="user" authorities="ROLE_USER" />
<security:user name="admin" password="admin" authorities="ROLE_ADMIN" />
</security:user-service>
-->
</security:authentication-provider>
</security:authentication-manager>
  • 配置文件中的accountService需要实现UserDetailsService接口,实现loadUserByUsername方法,

    security框架会根据这个方法来获取用户信息
    @Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return accountDao.getJoinRole(username);
}

由于这个方法返回的是UserDetails类型,所以我们的用户类Account需要实现UserDetails接口,

在Account中。由于实现UserDetails接口,需要返回角色信息的类型为Collection<? extends GrantedAuthority>,所以我们的Role类还需要实现GrantedAuthority接口

    /**
* 返回角色集合
*/
@Transient
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return roles;
}

详情请看下面百度云连接

注:如果项目启动报错,刷新maven

4.uml图说明其中的关系

spring采用了接口的方式,来规定流程,我们需要实现相应的接口来把这个流程跑起来。
    认证管理器 <security:authentication-manager>中要求我们实现UserDetailsService接口,而接口中的方法 public UserDetails loadUserByUsername(String username) 规定了我们要返回UserDetails 类型,所以我们的account需要实现UserDetails接口,接下来UserDetails接口中需要实现public Collection<? extends GrantedAuthority> getAuthorities()方法,规定了我们返回的角色role类需要实现GrantedAuthority接口。下面是图解。

百度云链接:http://pan.baidu.com/s/1geD4635 密码:wo2i

Spring-Security (学习记录三)--读取数据库中的用户和角色的更多相关文章

  1. Spring Security 学习记录

    一.核心拦截器详细说明 1.WebAsyncManagerIntegrationFilter 根据请求封装获取WebAsyncManager 从WebAsyncManager获取/注册Security ...

  2. SpringSecurity数据库中存储用户、角色、资源

    这几天项目中用到了SpringSecurity做登陆安全.所以在这写一下也许可以帮助一下其他人,自己也熟悉一下 SpringSecurity配置文件如下: <beans:beans xmlns= ...

  3. SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证

    整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...

  4. [转]Spring Security学习总结二

    原文链接: http://www.blogjava.net/redhatlinux/archive/2008/08/20/223148.html http://www.blogjava.net/red ...

  5. [转]Spring Security学习总结一

    [总结-含源码]Spring Security学习总结一(补命名空间配置) Posted on 2008-08-20 10:25 tangtb 阅读(43111) 评论(27)  编辑  收藏 所属分 ...

  6. spring security使用hibernate进行查询数据库验证

    前面查询数据库采用的都是jdbc方式,如果系统使用的是hibernate,该如何进行呢,下面就是实现步骤,关键还是实现自定义的UserDetailsService 项目结构如下: 使用hibernat ...

  7. SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能

    在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...

  8. Spring Security教程(二):通过数据库获得用户权限信息

    上一篇博客中,Spring Security教程(一):初识Spring Security,我把用户信息和权限信息放到了xml文件中,这是为了演示如何使用最小的配置就可以使用Spring Securi ...

  9. spring security实现记录用户登录时间等信息

    目录 spring security实现记录用户登录时间等信息 一.原理分析 二.实现方式 2.1 自定义AuthenticationSuccessHandler实现类 2.2 在spring-sec ...

随机推荐

  1. 前端agl分页的写法

    <!-- 分页组件开始 --> <script src="../plugins/angularjs/pagination.js"></script&g ...

  2. onethink后台代码简单分析(1)

    onethink后台的入口页面同样是Index/index控制器 首先,Index继承了AdminController,AdminController有一个_initialize函数,这是所有后台运行 ...

  3. 在delphi中执行javascript代码

    有时做项目难免用到代码交叉调用,delphi中执行js就是一种,两种方法可用: 一.使用webbrower,比较麻烦 二.使用ScriptControl,简单方便: 1.首先 uses ComObj; ...

  4. es6学习笔记--箭头函数

    基本用法 ES6允许使用“箭头”(=>)定义函数. var f = v => v; 上面的箭头函数等同于: var f = function(v) { return v; }; 如果箭头函 ...

  5. Android_开发片段(Part 3)

    1.Android中的五种布局方式:线性布局(Linear Layout).相对布局(Relative Layout).表格布局(Table Layout).网格视图(Grid View).标签布局( ...

  6. (转)OpenFire源码学习之九:OF的缓存机制

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43415023 关于缓存,openfire存储到了本地JVM中.本人认为这样并不是很好.以 ...

  7. 如何在普通用户权限cmd怎么使用命令行变为管理员权限

    这两天在弄MySql,由于我下载的是免安装版本,环境自己配置了一下.有强迫症不喜欢某些服务打开在我不需要的时候,我一般都设置为手动,但是每次使用数据库时都要使用net start mysql启动MyS ...

  8. 2、Android自动测试之Monkey工具

    Android自动测试之Monkey工具 APP测试工作中经常会听到领导说,APP压力测试做了吗?刚入行时,不知道什么是 APP压力测试,找了半天没找到自己想要的.过了几年,回头想这个问题,发现牵扯了 ...

  9. 调试Bochs在Linux Mint下面symbol not found的问题

    在我的Linux Mint上使用Bochs时出现了很奇怪的问题,按照http://www.cnblogs.com/long123king/p/3568575.html步骤 会提示: symbol no ...

  10. phoenix 利用CsvBulkLoadTool 批量带入数据并自动创建索引

    需要先创建表: CREATE TABLE IF NOT EXISTS population ( state CHAR() NOT NULL, city VARCHAR NOT NULL, popula ...