春季安全匿名认证

春季安全匿名认证

隐姓埋名认证

对于隐姓埋名考察的用户,Spring Security 扶助为其创造一个隐姓埋名的 AnonymousAuthenticationToken 寄存在 SecurityContextHolder 中,这即是所谓的隐姓埋名认证。如许在此后举行权力认证大概做其它操纵时咱们就不须要再确定 SecurityContextHolder 中持有的 Authentication 东西能否为 null 了,而径直把它当作一个平常的 Authentication 举行运用就 OK 了。

摆设

运用 NameSpace 时,http 元素的运用默许就会起用对隐姓埋名认证的扶助,然而咱们也不妨经过树立 http 元素下的 anonymous 元素的 enabled 属性为 false 停用对隐姓埋名认证的扶助。以次是 anonymous 元素不妨摆设的属性,以及它们的默许值。

<security:anonymous enabled="true" key="doesNotMatter" username="anonymousUser" granted-authority="ROLE_ANONYMOUS"/>

key 用来指定一个在 AuthenticationFilter 和 AuthenticationProvider 之间共享的值。username 用来指定隐姓埋名用户所对应的用户名,granted-authority 用来指定隐姓埋名用户所具备的权力。

与隐姓埋名认证关系的类有三个,AnonymousAuthenticationToken 将动作一个 Authentication 的范例寄存在 SecurityContextHolder 中;过滤器运转到 AnonymousAuthenticationFilter 时,即使 SecurityContextHolder 中持有的 Authentication 仍旧空的,则 AnonymousAuthenticationFilter 将创造一个 AnonymousAuthenticationToken 共存放在 SecurityContextHolder 中。结果一个关系的类是 AnonymousAuthenticationProvider,其会增添到 ProviderManager 的 AuthenticationProvider 列表中,以扶助对 AnonymousAuthenticationToken 的认证。AnonymousAuthenticationToken 的认证是在 AbstractSecurityInterceptor 中的 beforeInvocation() 本领中举行的。运用 http 元素设置时那些 bean 都是会机动设置和增添的。即使须要手动设置那些 bean 的话,那么不妨如次设置:

<bean id="anonymousAuthFilter"

class="org.springframework.security.web.authentication.AnonymousAuthenticationFilter">

<property name="key" value="doesNotMatter" />

<property name="userAttribute" value="anonymousUser,ROLE_ANONYMOUS" />

</bean>

<bean id="anonymousAuthenticationProvider"

class="org.springframework.security.authentication.AnonymousAuthenticationProvider">

<property name="key" value="doesNotMatter" />

</bean>

key 是在 AnonymousAuthenticationProvider 和 AnonymousAuthenticationFilter 之间共享的,它们必需维持普遍,AnonymousAuthenticationProvider 将运用自己具有的 key 与传入的 AnonymousAuthenticationToken 的 key 作比拟,沟通则觉得不妨举行认证,要不将抛出特殊 BadCredentialsException。userAttribute 属性是以 usernameInTheAuthenticationToken,grantedAuthority[,grantedAuthority] 的情势举行设置的。

AuthenticationTrustResolver

AuthenticationTrustResolver 是一个接口,个中设置有两个本领,isAnonymous() 和 isRememberMe(),它们都接受一个 Authentication 东西动作参数。它有一个默许实行类 AuthenticationTrustResolverImpl,Spring Security 即是运用它来确定一个 SecurityContextHolder 持有的 Authentication 能否 AnonymousAuthenticationToken 或 RememberMeAuthenticationToken。如当 ExceptionTranslationFilter 捕捉到一个 AccessDecisionManager 后就会运用它来确定暂时 Authentication 东西能否为一个 AnonymousAuthenticationToken,即使是则交由 AuthenticationEntryPoint 处置,要不将归来 403 缺点码。

分享到 :
相关推荐

Leave a Reply

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