认证和鉴权

配置文件方式

<authentication-manager>
<authentication-provider>
<!-- 用户的权限控制 -->
<user-service>
<user name="admin" password="123" authorities="ROLE_USER, ROLE_ADMIN" />
<user name="user" password="123" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>

jdbc-user-service方式

 <!-- 默认数据库对用户进行存储 Spring Security默认情况下需要两张表,用户表和权限表。-->
<authentication-manager>
<authentication-provider>
<!-- <user-service>
<user name="admin" password="123" authorities="ROLE_USER, ROLE_ADMIN" />
<user name="user" password="123" authorities="ROLE_USER" />
</user-service>-->
<jdbc-user-service data-source-ref="mysqlDataSource"
users-by-username-query="select username,`password`,`status` as enabled from `user` where username = ?"
authorities-by-username-query="select `user`.username,role.`name` from `user`,role,user_role where `user`.id=user_role.user_id and user_role.role_id=role.id and `user`.username = ?" /> </authentication-provider>
</authentication-manager>
  • note1: 默认数据库对用户进行存储 Spring Security默认情况下需要两张表,用户表和权限表
  • note2: data-source-ref="mysqlDataSource",引用数据源,连接数据库
  • note3: 数据库中创建三张表user、role、user_role
- - 角色
create table role(
id bigint,
`name` varchar(50),
descn varchar(200)
);
alter table role add constraint pk_role primary key(id);
- - alter table role alter column id int generated by default as identity(1, 1); - - 用户
create table `user`(
id bigint,
username varchar(50),
`password` varchar(50),
`status` integer,
descn varchar(200)
);
alter table `user` add constraint pk_user primary key(id);
- - alter table `user` alter column id bigint generated by default as identity(start with 1); - - 用户角色连接表
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);

动态加载方式

    <!--更改验证信息加载方式 -->
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="MyUserDetailsService">
</authentication-provider>
</authentication-manager> <!-- 自定义类MyUserDetailsService -->
<beans:bean id="MyUserDetailsService" class="xx.xx.MyUserDetailsService" />
  • 自定义权限类
public class MyGrantedAuthority implements GrantedAuthority {
// 权限信息
private String authority; public MGrantedAuthority(String authority) {
this.authority = authority;
} public String getAuthority() {
return authority;
}
}
  • 自定义用户信息类
public class MyUserDetails implements UserDetails {

    private String username;
private String password;
private Set<MGrantedAuthority> authorities; public MUserDetails(String username, String password, Set<MGrantedAuthority> authorities) { this.username = username;
this.password = password;
this.authorities = authorities;
} public Collection<? extends GrantedAuthority> getAuthorities() {
return authorities;
} public String getPassword() {
return password;
} public String getUsername() {
return username;
} // 账户是否没有过期
public boolean isAccountNonExpired() {
return true;
} // 账户是否没有被锁
public boolean isAccountNonLocked() {
return true;
} // 资格是否没有过期
public boolean isCredentialsNonExpired() {
return true;
} // 该用户信息是否可用
public boolean isEnabled() {
return true;
}
}
  • 获取用户信息
public class MyUserDetailsService implements UserDetailsService {

    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// TODO 数据库查询用户信息和数据库信息 // 查询数据库USE表获取用户密码
String password = queryUsr(username);
// 查询role表获取用户权限
Set<MGrantedAuthority> authorities = queryRole(username)); // 将获取到的用户信息放入UserDetails中
MyUserDetails userDetails = new MyUserDetails(username, password, authorities); return userDetails;
}
}

Spring Security 03的更多相关文章

  1. 【手摸手,带你搭建前后端分离商城系统】03 整合Spring Security token 实现方案,完成主业务登录

    [手摸手,带你搭建前后端分离商城系统]03 整合Spring Security token 实现方案,完成主业务登录 上节里面,我们已经将基本的前端 VUE + Element UI 整合到了一起.并 ...

  2. Spring Security(03)——核心类简介

    目录 1.1     Authentication 1.2     SecurityContextHolder 1.3     AuthenticationManager和Authentication ...

  3. 03 spring security执行流程分析

    spring security主要是依赖一系列的Filter来实现权限验证的,责任链设计模式是跑不了的.下面简单记录一下spring操作这些Filter的过程. 1. WebSecurityConfi ...

  4. Spring Security教程系列(一)基础篇-2

    第 4 章 自定义登陆页面 Spring Security虽然默认提供了一个登陆页面,但是这个页面实在太简陋了,只有在快速演示时才有可能它做系统的登陆页面,实际开发时无论是从美观还是实用性角度考虑,我 ...

  5. 转 - spring security oauth2 password授权模式

    原贴地址: https://segmentfault.com/a/1190000012260914#articleHeader6 序 前面的一篇文章讲了spring security oauth2的c ...

  6. Spring boot+Spring Security 4配置整合实例

    本例所覆盖的内容: 1. 使用Spring Security管理用户身份认证.登录退出 2. 用户密码加密及验证 3. 采用数据库的方式实现Spring Security的remember-me功能 ...

  7. Spring Security Java Config Preview--官方

    原文地址:[1]https://spring.io/blog/2013/07/02/spring-security-java-config-preview-introduction/ [2]https ...

  8. spring security集成cas实现单点登录

    spring security集成cas 0.配置本地ssl连接 操作记录如下: =====================1.创建证书文件thekeystore ,并导出为thekeystore.c ...

  9. Spring Security 教程 大牛的教程

    https://www.iteye.com/blog/elim-2247073 Spring Security 教程 Spring Security(20)——整合Cas Spring Securit ...

随机推荐

  1. BCR-ABL融合基因及检测

    费城染色体 费城染色体(Philadelphia chromosome, Ph (or Ph') chromosome),或称费城染色体易位(Philadelphia translocation),是 ...

  2. 攻防世界--re-for-50-plz-50

    RetDec是真的难安装,太笨了~~~ 1.准备 获取信息 32位文件 2.IDA打开 发现这是MIPS代码.本来准备安装RetDec,哎...还是恶补MIPS指令知识吧:https://www.cn ...

  3. 使用jQuery实现Socket客户端

    摘于抄书web前端开发 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  4. js中的回调地狱 Callback to Hell

        本文重点:解决方式:1.promise  2. 拆解 function:将各步拆解为单个的 function  3. 通过 Generator 函数暂停执行的效果方式 4. 通过ES8的异步函 ...

  5. 关于print的一点秀操作

    我们在玩 Python 的时候 常常会使用到 print 这个函数 主要用它来打印一些输出 这样我们可以更加方便的知道 程序的运行情况 我们常常这样操作   不过不是很骚 有时候我们想更加直观的看到我 ...

  6. Python中queue消息队列模块

    from queue import Queue from queue import PriorityQueue print("Queue类实现了一个基本的先进先出(FIFO)容器,使用put ...

  7. linux测试 Sersync 是否正常

    [root@SERSYNC web]# for i in {1..10000};do echo 123456 > /data/web/$i &>/dev/null;do ne [r ...

  8. Xshell设置密钥登录确保Linux

    用Xshell设置密匙登陆服务器, 第一步.使用Xshell生成密钥 我们打开熟悉的XSHELL软件,然后在工具-新建用户密钥生成向导. 到了生成密钥参数界面,我们这里需要选择RSA密钥类型,以及密钥 ...

  9. Tensorflow学习笔记3:卷积神经网络实现手写字符识别

    # -*- coding:utf-8 -*- import tensorflow as tf from tensorflow.examples.tutorials.mnist import input ...

  10. [php代码审计] php://filter

    筛选过滤应用: 1. 字符串过滤器: string.rot13 对字符串执行ROT13转换 string.toupper转换为大写 string.tolower 转换为小写 string.strip_ ...