用数据库中的用户跟角色替换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. Unity NGUI插件

    前言:关于Unity中关于UI的插件,我们最开始学的是UGUI,是Unity自带的UI系统,而在Unity版本还没更新出UGUI之前,除了NGUI没有一个更好些的插件,所以人们不得不去选择NGUI去制 ...

  2. AcWing 144. 最长异或值路径 01字典树打卡

    给定一个树,树上的边都具有权值. 树中一条路径的异或长度被定义为路径上所有边的权值的异或和: ⊕ 为异或符号. 给定上述的具有n个节点的树,你能找到异或长度最大的路径吗? 输入格式 第一行包含整数n, ...

  3. (转)Openfire 中SASL的认证方式之:PLAIN,DIGEST-MD5,anonymous

    转:http://blog.csdn.net/coding_me/article/details/39524137 SASL  的认证方式包括:     1. PLAIN:plain是最简单的机制,但 ...

  4. fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit

    最近想用一下Xtreme ToolkitPro 界面库,安装后用VC6根据向导 产生一个工程,编译时出现如下的错误: fatal error C1076: compiler limit : inter ...

  5. java url中文参数乱码

    String city=new String(city_name.getBytes("ISO-8859-1"), "UTF-8");

  6. java xmltojson jsontoxml

    JSONObject.fromObject需要的有额外的6个包,必不可少,一定要注意: commons-beanutils-1.9.2.jar      commons-collections-3.2 ...

  7. JAVA学习之进制转换练习

    public static void main(String[] args) { toBin(60); toBa(60); toHex(60); } /** 十进制-->二进制 */ publi ...

  8. Day 22: 软件开发目录设计规范

    软件开发目录设计 对于提高项目可读性.可维护性的要求就很高了.”项目目录结构”其实也是属于”可读性和可维护性”的范畴,我们设计一个层次清晰的目录结构,就是为了达到以下两点: 可读性高: 不熟悉这个项目 ...

  9. what have we learnt in day five

    what is file? virtual unit offered by operation system steps to open file 1.find the file_path(file_ ...

  10. Alice's Classified Message HDU - 5558 后缀自动机求某个后缀出现的最早位置

    题意: 给定一个长度不超过 10W 的只包含小写字母的字符串,从下标 0 到 n−1.从下标 0 开始操作, 每次对于下标 pos查找下标 pos 开始的子串中最长的在其他地方出现过的长度,其他出现的 ...