Spring Security 03
认证和鉴权
配置文件方式
<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的更多相关文章
- 【手摸手,带你搭建前后端分离商城系统】03 整合Spring Security token 实现方案,完成主业务登录
[手摸手,带你搭建前后端分离商城系统]03 整合Spring Security token 实现方案,完成主业务登录 上节里面,我们已经将基本的前端 VUE + Element UI 整合到了一起.并 ...
- Spring Security(03)——核心类简介
目录 1.1 Authentication 1.2 SecurityContextHolder 1.3 AuthenticationManager和Authentication ...
- 03 spring security执行流程分析
spring security主要是依赖一系列的Filter来实现权限验证的,责任链设计模式是跑不了的.下面简单记录一下spring操作这些Filter的过程. 1. WebSecurityConfi ...
- Spring Security教程系列(一)基础篇-2
第 4 章 自定义登陆页面 Spring Security虽然默认提供了一个登陆页面,但是这个页面实在太简陋了,只有在快速演示时才有可能它做系统的登陆页面,实际开发时无论是从美观还是实用性角度考虑,我 ...
- 转 - spring security oauth2 password授权模式
原贴地址: https://segmentfault.com/a/1190000012260914#articleHeader6 序 前面的一篇文章讲了spring security oauth2的c ...
- Spring boot+Spring Security 4配置整合实例
本例所覆盖的内容: 1. 使用Spring Security管理用户身份认证.登录退出 2. 用户密码加密及验证 3. 采用数据库的方式实现Spring Security的remember-me功能 ...
- Spring Security Java Config Preview--官方
原文地址:[1]https://spring.io/blog/2013/07/02/spring-security-java-config-preview-introduction/ [2]https ...
- spring security集成cas实现单点登录
spring security集成cas 0.配置本地ssl连接 操作记录如下: =====================1.创建证书文件thekeystore ,并导出为thekeystore.c ...
- Spring Security 教程 大牛的教程
https://www.iteye.com/blog/elim-2247073 Spring Security 教程 Spring Security(20)——整合Cas Spring Securit ...
随机推荐
- VINS 估计器之外参初始化
为何初始化外参 当外参完全不知道的时候,VINS也可以在线对其进行估计(rotation),先在processImage内进行初步估计,然后在后续优化时,会在optimize函数中再次优化. 如何初始 ...
- 图像函数 imagecreatetruecolor()和imagecreate()的异同点
共同点:这两个函数都是用于创建画布 区别: 1.不同的是创建画布和为画布填充颜色的流程不一样; 用imagecreatetruecolor(int x,int y)创建的是一幅大小为 x和 y的图像( ...
- Form表单的主要Content-Type
在Spa单页面横行的时代,前后端交互基本都是Json交互(也有通过FormData的,比如上传文件).而在之前的Jsp,Php前后不分家的时候,前后交互好大一部分都是通过Form表单来完成的.From ...
- Tcp客户端构建流程
tcp客户端构建流程 tcp的客户端要比服务器端简单很多,如果说服务器端是需要自己买手机.查手机卡.设置铃声.等待别人打电话流程的话,那么客户端就只需要找一个电话亭,拿起电话拨打即可,流程要少很多 示 ...
- 浅谈协议(四)——wireshark强力解析视频流协议
参考链接: https://wenku.baidu.com/view/460f016e49d7c1c708a1284ac850ad02de800722.html https://wenku.baidu ...
- Linux手册页内容
总用9页 man1:可执行程序或shell命令 man2:系统调用(kernel提供的函数) man3:库调用(程序库中的函数) man4:/dev中的特殊文件 ...
- vue 打包上线后 所使用的css3渐变属性丢失的问题解决方案
最近在做vue项目的时候用到了css3渐变属性,本地跑项目没问题,但是打包放到服务器后发现这个属性丢失了.如下图: .join{ position:absolute; left:1rem; botto ...
- Tomcat的作用思考及NIO在Tomcat中的应用模型
Tomcat的作用 平时写完web程序都是直接点击启动,就可以在本机浏览器访问了.但是仔细想想,我们似乎都没有写过浏览器与servlet通信的代码,也没有写过创建request.reponse的代码. ...
- struts2+jsp 遍历 <s:iterator><s:property>
直接把list用request传到jsp页面 <s:iterator var="u" value="#request.users"> <tr& ...
- Python---编辑器安装和print函数
Python---编辑器安装和print函数 -------------------------------------------------------- 一.Python是什么? Python是 ...