博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Security 入门(1-5)Spring Security - 匿名认证
阅读量:4970 次
发布时间:2019-06-12

本文共 1975 字,大约阅读时间需要 6 分钟。

匿名认证

对于匿名访问的用户,Spring Security 支持为其建立一个匿名的 AnonymousAuthenticationToken 存放在 SecurityContextHolder 中,这就是所谓的匿名认证。这样在以后进行权限认证或者做其它操作时我们就不需要再判断 SecurityContextHolder 中持有的 Authentication 对象是否为 null 了,而直接把它当做一个正常的 Authentication 进行使用就 OK 了。

配置

使用 NameSpace 时,http 元素的使用默认就会启用对匿名认证的支持,不过我们也可以通过设置 http 元素下的 anonymous 元素的 enabled 属性为 false 停用对匿名认证的支持。以下是 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 的话,那么可以如下定义:

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 错误码。

转载于:https://www.cnblogs.com/lexiaofei/p/7027807.html

你可能感兴趣的文章
httpencode编码
查看>>
cross socket和msgpack的数据序列和还原
查看>>
解决跨操作系统平台JSON中文乱码问题
查看>>
DELPHI搭建centos开发环境
查看>>
IdHTTPServer允许跨域访问
查看>>
更新.net core 3.0,dotnet ef命令无法使用的解决办法
查看>>
React躬行记(13)——React Router
查看>>
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(2)——Babel
查看>>
前端利器躬行记(6)——Fiddler
查看>>
Forbidden You don't have permission to access / on this server.
查看>>
Windows server 2008 R2中安装MySQL !
查看>>
Intellij Idea新建web项目(转)
查看>>
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>
linux 命令之top
查看>>
洛谷 [P3033] 牛的障碍
查看>>
centos iptables
查看>>
unity3d 移动与旋转 2
查看>>
寻找二叉查找树中比指定值小的所有节点中最大的那个节点
查看>>
如何设置输入框达到只读效果
查看>>