zyc的博客

疾风亦有归途

概述

很多时候,在开发的过程中我们需要获取本机的ip地址,网上有很多现成的代码可以copy过来,但是由于自己对网络这一块的知识理解的不透彻,导致了开发过程中出现的一些问题无法解决。

阅读全文 »

概述

spring-boot-starter-security和spring其它系列的starter一样,依赖spring-boot-autoconfigure,根据其META-INF下的spring.factories加载自动配置类,然后进行一系列的初始化配置。查看spring.factories下的EnableAutoConfiguration和spring-security相关的一共有以下几种自动配置

1
2
3
4
5
6
SecurityAutoConfiguration
SecurityRequestMatcherProviderAutoConfiguration
UserDetailsServiceAutoConfiguration
SecurityFilterAutoConfiguration
ReactiveSecurityAutoConfiguration
ReactiveUserDetailsServiceAutoConfiguration

下面对这些自动配置类进行简单的分析

阅读全文 »

概述

FilterSecurityInterceptor是整个过滤器链中的最后一个过滤器,它的整个执行机制很复杂,这里我简单的描述一下的作用:它负责将之前过滤产生的认证信息从当前请求上下文中取出来,对请求的资源做权限判断,如果无权访问相应的资源,则抛出spring-security异常,由上一篇的ExceptionTranslationFilter进行处理。

阅读全文 »

概述

ExceptionTranslationFilter处理过滤器链中抛出的任何AccessDeniedException和AuthenticationException,如果是AuthenticationException则调用AuthenticationEntryPoint处理,如果是AccessDeniedException并且当前的Authentication是匿名用户或者是记住我用户依旧是调用AuthenticationEntryPoint处理,否则调用AccessDeniedHandler进行处理。

阅读全文 »

概述

spring-security为了使整个认证流程中的SecurityContext中始终存在一个Authentication信息,在过滤器链的认证阶段尾部填充了一个名为AnonymousAuthenticationFilter的过滤器,该过滤的主要作用是当认证阶段结束后,检测SecurityContextHolder中是否存在Authentication对象,如果不存在则用一个匿名的认证令牌填充进去。

阅读全文 »

概述

本文是接着上一篇的UsernamePasswordAuthenticationFilter源码分析在匹配到需要认证的请求时,内部是如何进行认证的。如果对这个过滤器不太了解,可以回头看一下它的原理。现在我们知道它最终是委托给AuthenticationManager进行认证的。从AuthenticationManager的实现类来看,它的主要实现类是ProviderManager,接下来我们着重看一下它内部的实现原理。

阅读全文 »

概述

UsernamePasswordAuthenticationFilter顾名思义,用户名密码认证过滤器,是用来处理用户名密码登陆请求的过滤器。匹配/login请求,从请求中获取用户名和密码,然后进行认证。如果认证成功则将生成的Authentication对象放入当前线程的SecurityContext,回顾

SecurityContextPersistenceFilter源码分析中SecurityContext的生成过程,然后调用配置的AuthenticationSuccessHandler。如果认证失败则调用AuthenticationFailureHandler。
阅读全文 »

概述

SecurityContextPersistenceFilter在整个过滤器链中排在了第二的位置,由此可见该过滤器的重要性,并且从该过滤器的名字大概可以看出它主要作用是持久化SecurityContext(安全上下文信息),即将整个安全相关的信息保存起来,这样下游的其它过滤器就可以使用这个安全信息进行相关的操作了。

阅读全文 »