目录
1.2 AuthenticationTrustResolver
对于匿名访问的用户,Spring Security支持为其建立一个匿名的AnonymousAuthenticationToken存放在SecurityContextHolder中,这就是所谓的匿名认证。这样在以后进行权限认证或者做其它操作时我们就不需要再判断SecurityContextHolder中持有的Authentication对象是否为null了,而直接把它当做一个正常的Authentication进行使用就OK了。
1.1 配置
使用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]的形式进行定义的。
1.2 AuthenticationTrustResolver
AuthenticationTrustResolver是一个接口,其中定义有两个方法,isAnonymous()和isRememberMe(),它们都接收一个Authentication对象作为参数。它有一个默认实现类AuthenticationTrustResolverImpl,Spring Security就是使用它来判断一个SecurityContextHolder持有的Authentication是否AnonymousAuthenticationToken或RememberMeAuthenticationToken。如当ExceptionTranslationFilter捕获到一个AccessDecisionManager后就会使用它来判断当前Authentication对象是否为一个AnonymousAuthenticationToken,如果是则交由AuthenticationEntryPoint处理,否则将返回403错误码。
(注:本文是基于Spring Security3.1.6所写)
(注:原创文章,转载请注明出处。原文地址:http://elim.iteye.com/blog/2163041)
相关推荐
1. **匿名访问**:对于未认证的请求,Spring Security默认允许匿名访问某些公共URL。 2. **身份验证**:当访问受保护资源时,系统会跳转到登录页面,用户输入凭证后,这些信息会被提交到AuthenticationManager进行...
12. 匿名认证 12.1. 概述 12.2. 配置 12.3. AuthenticationTrustResolver IV. 授权 13. 验证架构 13.1. 验证 13.2. 处理预调用 13.2.1. AccessDecisionManager 13.2.2. 基于投票的AccessDecisionManager...
- **高级特性**:除了基本的认证和授权外,Spring Security 还提供了一些高级特性,例如透明的认证上下文传播、自动“记住我”认证、匿名认证、运行时身份认证(run-as authentication)、JAAS 集成、JEE 容器认证、...
2. **依赖注入**: 熟悉Spring框架的核心概念之一——依赖注入(Dependency Injection),对于理解和使用Spring Security尤为重要。通过依赖注入,可以轻松地将安全组件集成到现有的Spring Bean配置中,简化了配置...
- **配置 Spring Security**: 在 Spring Security 中启用预先认证功能。 ##### 18. 切换用户 - **配置方式**: 配置切换用户功能。 - **实例演示**: 通过代码示例演示如何切换用户。 ##### 19. 信道安全 - **设置...
- **配置Spring Security**:调整Spring Security的配置以支持预先认证。 #### 17. 切换用户 - **配置方式**:介绍如何配置Spring Security以支持用户切换功能。 - **实例演示**:提供一个具体的例子,展示用户...
本篇文章将深入探讨基于Spring Boot的安全框架——Spring Security,并通过项目"DemoWebSpringBoot_Security"进行实战解析。 首先,我们需要了解Spring Security的基本概念。Spring Security是一个全面的安全管理...
在Java蓝盒子系统中,Spring Security可以用来定义用户角色、权限分配、URL访问控制以及处理认证和授权流程。 在具体的实现过程中,Spring Boot结合Spring Security可以创建一个安全的RESTful API。例如,可以通过...
首先,我们要理解Spring Boot中的安全组件——Spring Security。这是一个全面的安全管理框架,它为Web应用提供认证(Authentication)和授权(Authorization)服务。在这个项目中,我们将利用Spring Security来实现...
此外,还能了解到如何处理用户认证与授权(可能使用Spring Security)、数据库事务管理、错误处理以及性能优化等方面的知识。 总的来说,【campus项目例子】是一个非常实用的学习资源,对于想要提升SpringBoot开发...
- 过滤器链设置:Shiro的过滤器链是实现权限控制的关键,我们需要根据需求配置不同的过滤器,如 anon(匿名访问)、authc(认证过滤器)等,以控制不同URL的访问权限。 3. **权限管理脚手架的构建** - 用户模块:...
首先,让我们了解Spring Boot中的安全组件——Spring Security。它是Spring生态系统的强大安全框架,用于处理身份验证和授权。在Spring Boot中,我们可以通过添加`spring-boot-starter-security`依赖来快速启用它。...
配置SpringSecurity,包括定义允许匿名访问的URL,以及需要身份验证的URL。在登录成功后,SpringSecurity会自动生成JWT并返回给客户端。客户端在后续的请求中附带JWT,服务器端通过验证JWT来确认用户身份。 数据库...
5. **安全框架**:Spring Security 为应用提供身份验证和授权服务。 6. **测试工具**:JUnit 和 Mockito 用于编写单元测试,确保代码质量。 在压缩包文件DWSurvey-master中,你可能会找到以下文件结构: 1. `pom....
Spring Security则可以用于实现权限控制,防止未授权访问。数据库如MySQL或MongoDB则可能存储位置历史记录,便于数据分析和查询。 在移动设备上,"WhereIsUser"可能结合Android的Location Services,通过监听GPS、...