春季安全认证

春季安全认证

认证简介

认证进程

用户运用用户名和暗号举行登录。

Spring Security 将获得到的用户名和暗号封装成一个实行了 Authentication 接口的 UsernamePasswordAuthenticationToken。

将上述爆发的 token 东西传播给 AuthenticationManager 举行登录认证。

AuthenticationManager 认证胜利后将会归来一个封装了用户权力等消息的 Authentication 东西。

经过挪用 SecurityContextHolder.getContext().setAuthentication(…) 将 AuthenticationManager 归来的 Authentication 东西付与给暂时的 SecurityContext。

上述引见的即是 Spring Security 的认证进程。在认证胜利后,用户就不妨连接操纵去考察其它受养护的资源了,然而在考察的功夫将会运用生存在 SecurityContext 中的 Authentication 东西举行关系的权力审定。

Web 运用的认证进程

即使用户径直考察登录页面,那么认证进程跟上节刻画的基础普遍,不过在认证实行后将跳转到指定的胜利页面,默许是运用的根路途。即使用户径直考察一个受养护的资源,那么认证进程将如次:

启发用户举行登录,常常是重定向到一个鉴于 form 表单举行登录的页面,简直视摆设而定。

用户输出用户名和暗号后乞求认证,后盾仍旧会像上节刻画的那么获得用户名和暗号封装成一个 UsernamePasswordAuthenticationToken 东西,而后把它传播给 AuthenticationManager 举行认证。

即使认证波折将连接实行办法 1,即使认证胜利则会生存归来的 Authentication 到 SecurityContext,而后默许会将用户重定向到之前考察的页面。

用户登录认证胜利后再次考察之前受养护的资源时就会对用户举行权力审定,如不生存对应的考察权力,则会归来 403 缺点码。

在上述办法中将有很多各别的类介入,但个中重要的介入者是 ExceptionTranslationFilter。

ExceptionTranslationFilter

ExceptionTranslationFilter 是用来处置来自 AbstractSecurityInterceptor 抛出的 AuthenticationException 和 AccessDeniedException 的。AbstractSecurityInterceptor 是 Spring Security 用来阻挡乞求举行权力审定的,其具有两个简直的子类,阻挡本领挪用的 MethodSecurityInterceptor 和阻挡 URL 乞求的 FilterSecurityInterceptor。当 ExceptionTranslationFilter 捕捉到的是 AuthenticationException 时将挪用 AuthenticationEntryPoint 启发用户举行登录;即使捕捉的是 AccessDeniedException,然而用户还没有经过认证,则挪用 AuthenticationEntryPoint 启发用户举行登录认证,要不将归来一个表白不生存对应权力的 403 缺点码。

在 request 之间共享 SecurityContext

大概你早就有这么一个疑义了,既是 SecurityContext 是寄存在 ThreadLocal 中的,并且在历次权力审定的功夫都是从 ThreadLocal 中获得 SecurityContext 中对应的 Authentication 所具有的权力,而且各别的 request 是各别的线程,干什么历次都不妨从 ThreadLocal 中获得到暂时用户对应的 SecurityContext 呢?在 Web 运用中这是经过 SecurityContextPersistentFilter 实行的,默许情景下其会在历次乞求发端的功夫从 session 中获得 SecurityContext,而后把它树立给 SecurityContextHolder,在乞求中断后又会将 SecurityContextHolder 所持有的 SecurityContext 生存在 session 中,而且废除 SecurityContextHolder 所持有的 SecurityContext。如许当咱们第一次考察体例的功夫,SecurityContextHolder 所持有的 SecurityContext 确定是空的,待咱们登录胜利后,SecurityContextHolder 所持有的 SecurityContext 就不是空的了,且包括有认证胜利的 Authentication 东西,待乞求中断后咱们就会将 SecurityContext 生存 session 中,比及下次乞求的功夫就不妨从 session 中获得到该 SecurityContext 并把它付与给 SecurityContextHolder 了,因为 SecurityContextHolder 仍旧持有认证过的 Authentication 东西了,以是下次考察的功夫也就不复须要举行登录认证了。

分享到 :
相关推荐

Leave a Reply

Your email address will not be published. Required fields are marked *