详解Spring Boot Security

Spring Security,这是一种基于 Spring AOP 和 Servlet 。这篇文章主要介绍了Spring Boot Security的相关知识,需要的朋友可以参考下

简介

Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤器的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。

工作流程

从网上找了一张Spring Security 的工作流程图,如下。

图中标记的MyXXX,就是我们项目中需要配置的。

快速上手

建表

表结构

建表语句

DROP TABLE IF EXISTS `user`; DROP TABLE IF EXISTS `role`; DROP TABLE IF EXISTS `user_role`; DROP TABLE IF EXISTS `role_permission`; DROP TABLE IF EXISTS `permission`; CREATE TABLE `user` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, PRIMARY KEY (`id`) ); CREATE TABLE `role` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ); CREATE TABLE `user_role` ( `user_id` bigint(11) NOT NULL, `role_id` bigint(11) NOT NULL ); CREATE TABLE `role_permission` ( `role_id` bigint(11) NOT NULL, `permission_id` bigint(11) NOT NULL ); CREATE TABLE `permission` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `url` varchar(255) NOT NULL, `name` varchar(255) NOT NULL, `description` varchar(255) NULL, `pid` bigint(11) NOT NULL, PRIMARY KEY (`id`) ); INSERT INTO user (id, username, password) VALUES (1,'user','e10adc3949ba59abbe56e057f20f883e'); INSERT INTO user (id, username , password) VALUES (2,'admin','e10adc3949ba59abbe56e057f20f883e'); INSERT INTO role (id, name) VALUES (1,'USER'); INSERT INTO role (id, name) VALUES (2,'ADMIN'); INSERT INTO permission (id, url, name, pid) VALUES (1,'/user/common','common',0); INSERT INTO permission (id, url, name, pid) VALUES (2,'/user/admin','admin',0); INSERT INTO user_role (user_id, role_id) VALUES (1, 1); INSERT INTO user_role (user_id, role_id) VALUES (2, 1); INSERT INTO user_role (user_id, role_id) VALUES (2, 2); INSERT INTO role_permission (role_id, permission_id) VALUES (1, 1); INSERT INTO role_permission (role_id, permission_id) VALUES (2, 1); INSERT INTO role_permission (role_id, permission_id) VALUES (2, 2);

pom.xml

org.springframework.bootspring-boot-starter-securityorg.springframework.bootspring-boot-starter-thymeleaforg.springframework.bootspring-boot-starter-weborg.thymeleaf.extrasthymeleaf-extras-security4

User

public class User implements UserDetails , Serializable { private Long id; private String username; private String password; private List authorities; public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Override public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Override public String getpassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public List getAuthorities() { return authorities; } public void setAuthorities(List authorities) { this.authorities = authorities; } /** * 用户账号是否过期 */ @Override public boolean isAccountNonExpired() { return true; } /** * 用户账号是否被锁定 */ @Override public boolean isAccountNonLocked() { return true; } /** * 用户密码是否过期 */ @Override public boolean isCredentialsNonExpired() { return true; } /** * 用户是否可用 */ @Override public boolean isEnabled() { return true; } }

上面的 User 类实现了 UserDetails 接口,该接口是实现Spring Security 认证信息的核心接口。其中 getUsername 方法为 UserDetails 接口 的方法,这个方法返回 username,也可以是其他的用户信息,例如手机号、邮箱等。getAuthorities() 方法返回的是该用户设置的权限信息,在本实例中,从数据库取出用户的所有角色信息,权限信息也可以是用户的其他信息,不一定是角色信息。另外需要读取密码,最后几个方法一般情况下都返回 true,也可以根据自己的需求进行业务判断。

Role

public class Role implements GrantedAuthority { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String getAuthority() { return name; } }

Role 类实现了 GrantedAuthority 接口,并重写 getAuthority() 方法。权限点可以为任何字符串,不一定是非要用角色名。

所有的Authentication实现类都保存了一个GrantedAuthority列表,其表示用户所具有的权限。GrantedAuthority是通过AuthenticationManager设置到Authentication对象中的,然后AccessDecisionManager将从Authentication中获取用户所具有的GrantedAuthority来鉴定用户是否具有访问对应资源的权限。

MyUserDetailsService

标签:JavaScript微信微信的版本号版本号语义化

-->上一篇:Java泛型定义与用法入门示例下一篇:全面分析Java文件上传 热门搜索

spring-security 

Spring boot 

spring-boot 

Spring-boot-devTools 

spring-boot-starter 

相关文章

详解Spring Boot Security

2021-09-10阅读(10986)评论(0)推荐()

Spring Security,这是一种基于 Spring AOP 和 Servlet 。这篇文章主要介绍了Spring Boot Security的相关知识,...

详解Spring Boot 使用Spring security 集成CAS

2021-09-20阅读(6875)评论(0)推荐()

本篇文章主要介绍了详解Spring Boot 使用Spring security 集成CAS,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Spring Boot Security配置教程

2021-11-05阅读(5427)评论(0)推荐()

在本文里我们给大家分享了关于Spring Boot Security配置的相关步骤以及注意要点,需要的朋友们跟着操作下。

Spring Boot整合Spring Security的示例代码

2021-09-18阅读(5545)评论(0)推荐()

这篇文章主要介绍了Spring Boot整合Spring Security的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

详解如何在spring boot中使用spring security防止CSRF攻击

2021-11-15阅读(7406)评论(0)推荐()

这篇文章主要介绍了详解如何在spring boot中使用spring security防止CSRF攻击,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起...

spring-boot集成spring-security的oauth2实现github登录网站的示例

2021-10-12阅读(6115)评论(0)推荐()

本篇文章主要介绍了spring-boot集成spring-security的oauth2实现github登录网站的示例,非常具有实用价值,需要的朋友可以参考下

Java SpringBoot安全框架整合Spring Security详解

2021-09-27阅读(4699)评论(0)推荐()

这篇文章主要介绍了Spring Boot整合Spring Security的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

取消

有人回复邮件通知

提交评论

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...