Spring Security

SpringBoot 优雅的集成Spring Security

六眼飞鱼酱① 提交于 2019-12-25 14:13:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>   前言      至于什么是Spring security ,主要两个作用,用户认证和授权。即我们常说的,用户只有登录了才能进行其他操作,没有登录的话就重定向到登录界面。有的用户有权限执行某一操作,而有的用户不能执行则是授权。算是一个项目安全框架。和shiro 框架一样。二者的不同大家可以百度小。Spring security 是Spring家族的一员,所以Springboot算是对Spring security 进行的天然的支持。      之所以这样说,spring security 被人诟病的配置繁琐复杂,在springboot中变的简单起来。如果我们只是demo 效果,可以做到0配置实现。      下面我们就一起来见识一下吧      依赖      我们在pom.xml 文件中引入Spring security 的statter      <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-security</artifactId>      </dependency>      <dependency>      <groupId>org

十二、SpringBoot 优雅的集成Spring Security

橙三吉。 提交于 2019-12-25 13:43:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 至于什么是Spring security ,主要两个作用,用户认证和授权。即我们常说的,用户只有登录了才能进行其他操作,没有登录的话就重定向到登录界面。有的用户有权限执行某一操作,而有的用户不能执行则是授权。算是一个项目安全框架。和shiro 框架一样。二者的不同大家可以百度小。Spring security 是Spring家族的一员,所以Springboot算是对Spring security 进行的天然的支持。 之所以这样说,spring security 被人诟病的配置繁琐复杂,在springboot中变的简单起来。如果我们只是demo 效果,可以做到0配置实现。 下面我们就一起来见识一下吧 依赖 我们在pom.xml 文件中引入Spring security 的statter <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter

spring security 自定义登录认证

守給你的承諾、 提交于 2019-12-24 11:35:44
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> spring security 自定义认证登录 1.概要 1.1.简介 spring security是一种基于 Spring AOP 和 Servlet 过滤器的安全框架,以此来管理权限认证等。 1.2.spring security 自定义认证流程 1)认证过程 生成未认证的AuthenticationToken ↑(获取信息) (根据AuthenticationToken分配provider) AuthenticationFilter -> AuthenticationManager -> AuthenticationProvider ↓(认证) UserDetails(一般查询数据库获取) ↓(通过) 生成认证成功的AuthenticationToken ↓(存放) SecurityContextHolder 复制代码 2)将AuthenticationFilter加入到security过滤链(资源服务器中配置),如: http.addFilterBefore(AuthenticationFilter, AbstractPreAuthenticatedProcessingFilter.class) 复制代码 或者: http.addFilterAfter(AuthenticationFilter,

7. Spring Boot中Spring Security短信验证码登录

瘦欲@ 提交于 2019-12-24 11:25:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在Spring Security添加图形验证码一节中,我们已经实现了基于Spring Boot + Spring Security的账号密码登录,并集成了图形验证码功能。时下另一种非常常见的网站登录方式为手机短信验证码登录,但Spring Security默认只提供了账号密码的登录认证逻辑,所以要实现手机短信验证码登录认证功能,我们需要模仿Spring Security账号密码登录逻辑代码来实现一套自己的认证逻辑。 短信验证码生成 我们在上一节Spring Security添加图形验证码的基础上来集成短信验证码登录的功能。 和图形验证码类似,我们先定义一个短信验证码对象SmsCode: public class SmsCode { private String code; private LocalDateTime expireTime; public SmsCode(String code, int expireIn) { this.code = code; this.expireTime = LocalDateTime.now().plusSeconds(expireIn); } public SmsCode(String code, LocalDateTime expireTime) { this

6. Spring Boot中Spring Security添加记住我功能

北城余情 提交于 2019-12-23 18:17:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在网站的登录页面中,记住我选项是一个很常见的功能,勾选记住我后在一段时间内,用户无需进行登录操作就可以访问系统资源。在Spring Security中添加记住我功能很简单,大致过程是:当用户勾选了记住我选项并登录成功后,Spring Security会生成一个token标识,然后将该token标识持久化到数据库,并且生成一个与该token相对应的cookie返回给浏览器。当用户过段时间再次访问系统时,如果该cookie没有过期,Spring Security便会根据cookie包含的信息从数据库中获取相应的token信息,然后帮用户自动完成登录操作。 token持久化 Spring Security的记住我功能的实现需要使用数据库来持久化token。我们在上一节 Spring Security添加图形验证码 的基础上来添加记住我的功能。 在application.yml中添加数据源配置: spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/security?useUnicode=yes&characterEncoding=UTF-8&useSSL=false username:

5. Spring Boot中Spring Security添加图形验证码

杀马特。学长 韩版系。学妹 提交于 2019-12-23 17:39:40
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 添加验证码大致可以分为三个步骤:根据随机数生成验证码图片;将验证码图片显示到登录页面;认证流程中加入验证码校验。Spring Security的认证校验是由 UsernamePasswordAuthenticationFilter 过滤器完成的,所以我们的验证码校验逻辑应该在这个过滤器之前。下面一起学习下如何在上一节 Spring Security自定义用户认证 的基础上加入验证码校验功能。 生成图形验证码 验证码功能需要用到 spring-social-config 依赖: <dependency> <groupId>org.springframework.social</groupId> <artifactId>spring-social-config</artifactId> </dependency> 首先定义一个验证码对象ImageCode: public class ImageCode { private BufferedImage image; private String code; private LocalDateTime expireTime; public ImageCode(BufferedImage image, String code, int expireIn) { this

4. Spring Boot中Spring Security自定义用户认证

╄→尐↘猪︶ㄣ 提交于 2019-12-23 16:24:15
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 自定义认证过程 自定义认证的过程需要实现Spring Security提供的 UserDetailService 接口,该接口只有一个抽象方法 loadUserByUsername ,源码如下: public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; } loadUserByUsername 方法返回一个 UserDetail 对象,该对象也是一个接口,包含一些用于描述用户信息的方法,源码如下: public interface UserDetails extends Serializable { Collection<? extends GrantedAuthority> getAuthorities(); String getPassword(); String getUsername(); boolean isAccountNonExpired(); boolean isAccountNonLocked(); boolean isCredentialsNonExpired(); boolean isEnabled(); }

Guide 哥:有哪些程序员受用一生的好习惯?

偶尔善良 提交于 2019-12-23 13:51:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文来自 Guide 哥开源的 Github 仓库 programmer-advancement: https://github.com/Snailclimb/programmer-advancement (程序员应该有的一些好习惯)。如果觉得文中的内容对你有帮助的话,不妨去点个 Star! 程序员修炼之路 学习/编程好习惯 养成一个学习习惯和编程习惯真的太重要了,一个好习惯的养成真的对后面的学习有很大帮助。说实话我自己当初在这方面吃了不少亏,很多比较好的习惯我也是后面自己才慢慢发现,所以这里想着重给大家说一下有哪些好的学习和编程习惯。 正确提问 我们平时任何时候都离不开提问特别是初学的时候,但是真正知道如何正确的提问的人很少。问别人问题前不要来一句“在吗”,你说你问了在吗我是回复好还是不回复好呢 ?不要让别人给你发 32 位的 JDK,除非你是喜欢那个人。 更多关于如何提问的内容,详见 github 上开源版『提问的智慧』 https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md ,抽时间看一下,我想看完之后应该会有很多收获。 更多内容可以查看我的这篇原创文章: 如何提问 健康生活

3. Spring Boot的Spring Security授权过程

血红的双手。 提交于 2019-12-23 11:40:34
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 类图 调试过程 找到org.springframework.security.web.access.intercept.FilterSecurityInterceptor类在doFilter方法加上断点,启动项目 源码分析 如图所示,显示了登录认证过程中的 filters 相关的调用流程,将几个重要的 filters 标注了出来, 从图中可以看出执行的顺序。来看看几个比较重要的 Filter 的处理逻辑, UsernamePasswordAuthenticationFilter , AnonymousAuthenticationFilter , ExceptionTranslationFilter , FilterSecurityInterceptor 以及相关的处理流程如下所述; UsernamePasswordAuthenticationFilter org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter 整个调用流程是,先调用其父类 AbstractAuthenticationProcessingFilter.doFilter() 方法,然后再执行

2. Spring Boot的Spring Security认证过程

守給你的承諾、 提交于 2019-12-23 11:14:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个 Authentiaton 对象作为参数; org.springframework.security.authentication.AuthenticationManager public interface AuthenticationManager { Authentication authenticate(Authentication authentication) throws AuthenticationException; } ProviderManager org.springframework.security.authentication.ProviderManager 它是 AuthenticationManager 的一个实现类,提供了基本的认证逻辑和方法;它包含了一个 List<AuthenticationProvider> 对象,通过 AuthenticationProvider 接口来扩展出不同的认证提供者(当 Spring Security 默认提供的实现类不能满足需求的时候可以扩展