深入浅出SpringSecurity
文章平均质量分 97
本专栏适合有一定基础的人订阅,因为本专栏的博客大部分都是在会使用的基础上深入源码学习,知其如何实现,方能灵活使用及其拓展。该专栏可带你深入了解SpringSecurity,赶紧订阅起来吧。
假正经的小柴
双非也有编程梦!在读大三,是一个爱看源码的小伙.....
展开
-
【深入浅出 Spring Security(十三)】使用 JWT 进行前后端分离认证(附源码)
使用JWT进行前后端分离认证实现,其后端主要实现其实就是分为俩步(在已经封装好JWT生成和验证工具类的基础上),第一步就是登录认证成功后如何将生成的 jwt 响应给前端?——在AuthenticationSuccessHandler中进行实现;第二步就是前端携带该 jwt 向服务器端发送请求后,如何去认证该请求?——去重写BasicAuthenticationFilter中的doFilterInternal方法,在此方法中进行认证即可...原创 2023-07-07 15:04:26 · 3120 阅读 · 12 评论 -
【深入浅出 Spring Security(十二)】使用第三方(Github)授权登录
这里的Github授权登录,就是使用的OAuth2权限模式中的授权码模式。过程即通过向Github进行授权,授权成功的话会返回一个授权码,后端通过授权码可以去向Github申请Access-Token,通过这个Token,即可读取一些Github的用户资源,观察到获取的用户信息里只有ROLE_USER,即user角色,所以说是获取Github上的用户的一些信息资源。原创 2023-06-23 17:49:53 · 3085 阅读 · 8 评论 -
【深入浅出 Spring Security(十一)】授权原理分析和持久化URL权限管理
授权主要的三大组件:ConfigAttribute(角色的封装体)、AccessDecisionManager(决策管理者,调用 decide 方法进行决策)、AccessDecisionVoter(决策者,通过 vote 方法进行投票决策)。原创 2023-06-22 16:09:07 · 2634 阅读 · 10 评论 -
【深入浅出 Spring Security(十)】权限管理的概述和使用详情
Spring Security 中提供的权限管理策略主要有两种类型:1. 基于过滤器的权限管理(FilterSecurityInterceptor)(基于过滤器的权限管理主要是用来拦截 HTTP 请求,拦截下来之后,根据 HTTP 请求地址进行权限校验。)2. 基于 AOP 的权限管理(MethodSecurityInterceptor)(基于 AOP 权限管理主要是用来处理方法级别的权限问题。当需要调用一个方法时,通过 AOP 将操作拦截下来,然后判断用户是否具备相关的权限。)原创 2023-06-19 21:09:58 · 937 阅读 · 0 评论 -
【深入浅出 Spring Security(九)】解决跨域问题和 Axios 所需配置
在解决跨域问题时,由于集成了 Spring Security,登录后需要进行认证,认证完请求服务器端要认证的资源需要携带其认证的Cookie(也就是那个SessionID,表明已经认证了)。那么在前端使用 Axios 发送跨域请求的时候,就需要配置 axios.defaults.withCredentials = true 。这是用于控制在发送跨域请求时是否携带身份凭证的(例如 Cookie、Http认证等),当然后端也需要配置。原创 2023-06-12 16:07:57 · 1757 阅读 · 1 评论 -
【深入浅出 Spring Security(八)】前后端分离-使用CSRF漏洞保护详讲
前后端分离使用 CSRF 漏洞保护,首先是得从 Cookie 中获取对应的 xsrf(即csrf)令牌信息,享受服务器端的服务需要在请求参数中或者请求头中配置这个令牌信息(这里请求方式不包括GET、HEAD、OPTIONS、TRACE,如果是这四个请求方式,过滤器会直接放行),请求参数中配置名为_csrf,值是令牌信息;请求头的话配置名是X-XSRF-TOKEN,值是令牌信息。这样在一定程度上就提高了系统的安全性,不刻意去搞的话,这种方式很大程度上防御了跨站请求伪造(CSRF)。原创 2023-06-11 14:33:20 · 3080 阅读 · 7 评论 -
【深入浅出 Spring Security(七)】RememberMe的实现原理详讲
RememberMe 实质呢就是将令牌以 Cookie 的形式响应给浏览器,然后浏览器进行了本地存储,等下次再次访问资源的时候,即会拿该令牌连请求一起到服务器端,令牌会使得后台进行自动登录(即用户认证)。原创 2023-06-09 10:12:20 · 1429 阅读 · 7 评论 -
【深入浅出 Spring Security(六)】一文搞懂密码的加密和比对
自定义加密通过源码分析可以得出两种自定义的方案:1.使用 {id} 的形式,即在密码前加上 {id},例如:{noop}123,即表示等密码比对的时候用 NoOpPasswordEncoder 中的matches方法进行比对。2.向 Spring 容器中注入 PasswordEncoder 实例,这样Spring Security 会选择注入的实例去进行密码的比对,缺点是整个项目的密码比对都只能采用这种比对方案。原创 2023-06-05 14:14:47 · 1996 阅读 · 0 评论 -
【深入浅出Spring Security(五)】自定义过滤器进行前后端登录认证
自定义登录认证可以去继承 UsernamePasswordAuthenticationFilter 过滤器重写 attemptAuthentication 方法进行自定义,然后再在自定义的 SecurityConfig 配置类里面去将它配置到 Spring 容器中,注意实例化它后一定要给它内部属性 AuthenticationManager 进行初始化赋值,不然交给Spring容器管理的时候会报错;最后添加到过滤器链中。原创 2023-06-04 13:43:16 · 3757 阅读 · 11 评论 -
【深入浅出 Spring Security(四)】登录用户数据的获取,超详细的源码分析
SecurityContextPersistenceFilter 完成了 SecurityContext 的存储和擦除; 在 5.6 版本(准确来说是5.7)后引入了 ListeningSecurityContextHolderStrategy 监听SecurityContext策略;可以使用 SecurityContextHolder.getContext.getAuthentication() 的方式获取登录用户数据;SecurityContext 的存储和擦除内部原创 2023-06-03 08:00:00 · 2159 阅读 · 2 评论 -
【深入浅出Spring Security(三)】默认登录认证的实现原理
思考:发送请求的登录界面是如何来的?用户名和密码为什么是user和一个UUID字符串呢?它又是如何进行用户名和密码验证的呢?得知道 DaoAuthenticationProvider retrieveUser 方法和 additionalAuthenticationChecks 方法(这俩方法分别应用了UserDetailsService和PasswordEncoder对象)。UsernamePasswordAuthenticationFilter 最后也是去通过 ProviderManager 中的 au原创 2023-05-30 18:31:50 · 3297 阅读 · 5 评论 -
【深入浅出Spring Security(二)】Spring Security的实现原理
Spring Security 提供了 30 多个过滤器。默认情况下 Spring Boot 在对 Spring Security 进行自动化配置时(SpringBoot Auto Configuration),会创建一个名为 `SpringSecurityFilterChain` 的过滤器链对象,并注入到 Spring 容器中,这个过滤器链将负责所有的安全管理,包括用户认证、授权、重定向到登录页面等。原创 2023-05-29 11:54:32 · 1330 阅读 · 0 评论 -
【深入浅出Spring Security(一)】Spring Security的整体架构
了解 Spring Security 的整体架构,主要是为了后续了解其内部原理做准备。Spring Security 作为一个安全框架,其主要就是认证和授权两大结构。认证(Authentication)的用户信息是间接的保存在 SecurityContextHolder中,在认证管理(AuthenticationManager)中管理着多个认证执行器,由它们进行认证,认证的有关详情被封装在Authenticatoin中。授权(Authorization)中权限名可通过ConfigAttribute通原创 2023-05-28 19:21:07 · 2266 阅读 · 22 评论