- 浏览: 194077 次
- 性别:
- 来自: 南京
文章分类
最新评论
前言:
在spring security中认证具体指的是什么以及如何做的,本文做一个简单的阐述
环境
spring boot 版本:1.5.4.RELEASE
下面我们一起考虑一个简单的大家都熟悉的认证情景
上面情景中的前三步就是基本的认证过程,下面让我们看下这在spring security中是如何发生的。
之后,当前用户就完成了认证。此过程,可以有如下代码来模拟
其中SampleAuthenticationManager是我们实现的一个认证类,只是简单判断如果用户名和密码相同就认证成功,并赋给用户一个固定的USER权限。运行后程序的输出如下
在实际应用中,我们也不会直接这样写代码,这里我们只是为了说明spring security的认证过程。这个例子也说明在spring security中如何判断认证成功,那就是SecurityContextHolder中包含一个完全组装好的Authentication对象。
这个例子也说明了spring security并不关心Authentication对象是如何存放到SecurityContextHolder中的,唯一需要确认的就是在AbstractSecurityInterceptor要鉴权一个用户时SecurityContextHolder中包含一个Authentication对象就OK了。
在spring security中认证具体指的是什么以及如何做的,本文做一个简单的阐述
环境
spring boot 版本:1.5.4.RELEASE
下面我们一起考虑一个简单的大家都熟悉的认证情景
- 1.一个用户被提示输入用户名和密码
- 2.系统验证用户名和密码是否合法
- 3.用户的上下文信息被获取(如用户的权限列表)
- 4.创建用户对应的安全上下文
- 5.当用户继续执行后续操作时,系统的安全访问控制机制利用当前的安全上下文信息来判断这些操作是否被许可
上面情景中的前三步就是基本的认证过程,下面让我们看下这在spring security中是如何发生的。
- 1.从httpRequest中获取username和password,然后组合成一个实现了Authentication接口的UsernamePasswordAuthenticationToken实例
- 2.组合成的token被传递给一个AuthenticationManager实例(ProviderManager)来验证
- 3.验证成功AuthenticationManager会返回一个组装好的Authentication实例(包含用户的权限信息)
- 4.通过调用SecurityContextHolder.getContext().setAuthentication(...)方法,并传入组装好的Authentication实例来创建安全上下文
之后,当前用户就完成了认证。此过程,可以有如下代码来模拟
import org.springframework.security.authentication.*; import org.springframework.security.core.*; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; public class AuthenticationExample { private static AuthenticationManager am = new SampleAuthenticationManager(); public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); while(true) { System.out.println("Please enter your username:"); String name = in.readLine(); System.out.println("Please enter your password:"); String password = in.readLine(); try { Authentication request = new UsernamePasswordAuthenticationToken(name, password); Authentication result = am.authenticate(request); SecurityContextHolder.getContext().setAuthentication(result); break; } catch(AuthenticationException e) { System.out.println("Authentication failed: " + e.getMessage()); } } System.out.println("Successfully authenticated. Security context contains: " + SecurityContextHolder.getContext().getAuthentication()); } } class SampleAuthenticationManager implements AuthenticationManager { static final List<GrantedAuthority> AUTHORITIES = new ArrayList<GrantedAuthority>(); static { AUTHORITIES.add(new SimpleGrantedAuthority("ROLE_USER")); } public Authentication authenticate(Authentication auth) throws AuthenticationException { if (auth.getName().equals(auth.getCredentials())) { return new UsernamePasswordAuthenticationToken(auth.getName(), auth.getCredentials(), AUTHORITIES); } throw new BadCredentialsException("Bad Credentials"); } }
其中SampleAuthenticationManager是我们实现的一个认证类,只是简单判断如果用户名和密码相同就认证成功,并赋给用户一个固定的USER权限。运行后程序的输出如下
Please enter your username: bob Please enter your password: password Authentication failed: Bad Credentials Please enter your username: bob Please enter your password: bob Successfully authenticated. Security context contains: \ org.springframework.security.authentication.UsernamePasswordAuthenticationToken@441d0230: \ Principal: bob; Password: [PROTECTED]; \ Authenticated: true; Details: null; \ Granted Authorities: ROLE_USER
在实际应用中,我们也不会直接这样写代码,这里我们只是为了说明spring security的认证过程。这个例子也说明在spring security中如何判断认证成功,那就是SecurityContextHolder中包含一个完全组装好的Authentication对象。
这个例子也说明了spring security并不关心Authentication对象是如何存放到SecurityContextHolder中的,唯一需要确认的就是在AbstractSecurityInterceptor要鉴权一个用户时SecurityContextHolder中包含一个Authentication对象就OK了。
发表评论
-
spring-security(二十五)鉴权
2018-03-27 11:21 1601前言 本文将详细探讨spring security中的鉴权 ... -
test
2018-03-19 21:20 0什么是服务发现 ... -
spring-security(二十四)CSRF
2018-03-24 09:54 81631.什么是CSRF攻击 下面我们以一个具体的例子来说明这种常见 ... -
spring-security(二十三)Remember-Me认证
2018-03-09 21:06 1340前言: Remember-me认证方式指的是能在不同的会话 ... -
spring-security(二十二)基本认证和摘要认证
2018-03-06 16:58 1804前言: 在web应用中,非常流行以基本认证和摘要认证作为备 ... -
spring-security(二十一)核心Filter-UsernamePasswordAuthenticationFilter
2018-03-04 11:05 1241一、UsernamePasswordAuthenticatio ... -
spring-security(二十)核心Filter-SecurityContextPersistenceFilter
2018-02-28 21:40 1132一、SecurityContextPersistenceFil ... -
spring-security(十九)核心Filter-ExceptionTranslationFilter
2018-02-27 16:31 2064前言: 在spring的安全 ... -
spring-security(十八)核心Filter-FilterSecurityInterceptor
2018-02-25 10:59 2350前言: 当用spring secur ... -
spring-security(二十六)整合CAS 实现SSO
2018-04-05 18:09 12461.cas 认证流程 2.spring security ... -
spring-security(十七)Filter顺序及简介
2018-02-22 18:16 7903前言: spring security在 ... -
spring-security(十六)Filter配置原理
2018-02-21 15:18 2387前言: spring security最常见的应用场景还是 ... -
spring-security(十五) Password编码
2018-02-19 15:15 1228前言: 在实际应用中 ... -
spring-security(十四)UserDetailsService
2018-02-19 11:35 1475前言: 作为spring security的核心类,大多数 ... -
spring-security(十三)核心服务类
2018-02-18 16:46 1418前言: 在之前的篇章中我们已经讲述了spring secu ... -
spring-security(十二)鉴权方式概述
2018-02-18 10:42 2527前言: 本文主要讲述在spring security鉴权的 ... -
spring-security(十一)Web应用认证过程
2018-02-17 17:17 1238前言: 本文将探讨当 ... -
spring-security(九)-核心组件
2018-02-17 10:46 869前言: 本文主要介绍在spring security中的几 ... -
spring-security(八)java config-sample之cas client
2018-02-16 11:26 2071前言: SSO英文全称Single Sign On,单点登 ... -
spring-security(七)java config-sample之concurrency
2018-02-15 10:51 673前言: 在实际应用中,我们可能会限制一个用户同时登录同一个 ...
相关推荐
9. **spring-tx-3.1.2.RELEASE.jar**:提供了事务管理功能,对于需要在认证和授权过程中涉及数据库操作的情况,这个模块确保了操作的原子性和一致性。 10. **spring-security-config-3.1.2.RELEASE.jar**:提供了...
它支持基本认证、表单登录、OAuth2等多种认证方式,确保只有经过验证的用户才能访问受保护的资源。 2. **授权**:授权是决定用户可以访问哪些资源的过程。Spring Security 提供基于角色的访问控制(RBAC),允许...
首先,让我们深入了解Spring Security的基本概念: 1. **认证(Authentication)**:这是确定用户身份的过程。在Spring Security中,一个`Authentication`对象包含了用户的身份信息。当我们输入用户名和密码并提交...
例如,`spring-security-core`负责基本的认证和授权逻辑,`spring-security-web`处理与Web安全相关的请求过滤,而`spring-security-config`则简化了在Spring应用上下文中定义安全规则的过程。 使用时,开发者可以...
- 引入了对HTTP基本认证和Digest认证的增强支持。 - 对RememberMe服务进行了改进,增强了安全性。 总结 Spring Security通过`spring-security-core`模块提供了全面的安全管理能力,它将认证、授权、会话管理和安全...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护...通过学习和理解这个示例,你可以掌握Spring Security的基本用法,并将其应用到自己的项目中,保护你的应用程序免受未授权访问的威胁。
5. **登录认证**:Spring Security提供了丰富的认证机制,包括基于表单的登录、HTTP基本认证、OAuth2等。在这个示例中,可能实现了自定义的登录页面,用户输入用户名和密码后,这些信息被发送到后端进行验证。验证...
- Spring Security 的验证机制允许开发者自定义认证过程,包括用户凭证的检查和存储。 - **直接设置 SecurityContextHolder 的内容**:允许在特定情况下直接设置用户的 Authentication 信息,从而绕过常规的身份...
描述了如何配置Spring Security提供表单登录和HTTP基本认证的支持。 - **登录后跳转和注销** 如何设置默认的登录成功跳转地址和注销处理逻辑,包括在退出用户时的处理选项。 在以上信息中,我们看到了Spring ...
由于Spring Boot 2.x中移除了对Spring Security OAuth的支持,因此Spring Security OAuth2 Boot 2.6.8的存在是为了方便迁移过程。它为从Spring Boot 1.x迁移到2.x时继续使用OAuth2提供了一个解决方案。 #### 六、第...
Spring Security支持多种认证方式,如基于表单的登录、HTTP基本认证、OAuth等。在这个版本中,你可以看到如何配置和实现这些不同的认证机制,并理解其背后的逻辑。 授权则是确定已认证的用户可以访问哪些资源。...
通过学习这个版本,我们可以了解Spring Security的基本架构和工作原理,为理解和使用更高级的版本奠定基础。同时,这个版本的API文档和JAR包对于修复旧系统中的安全问题或研究历史实现也具有参考价值。
3. **Filter Chain**:Spring Security的核心是Filter Chain,它处理每个HTTP请求,执行认证和授权过程。 4. **表达式式访问控制**:使用Spring Expression Language (SpEL)可以在访问控制中实现更复杂的逻辑。 5....
本节将详细介绍Spring Security的基本配置过程,以及如何通过Maven管理项目的依赖。 - **使用Maven管理依赖**:由于Spring框架本身体积较大(Spring.jar就有2M多),因此推荐使用Maven来管理项目的依赖。Maven可以...
1. **认证**:这是验证用户身份的过程,Spring Security提供了多种认证方式,如基于表单的登录、HTTP基本认证、JWT(JSON Web Tokens)等。在2.5版本中,可能会使用`UserDetailsService`接口来查询用户信息,以及`...
Spring Security支持多种认证方式,如基于表单的登录、HTTP基本认证、OAuth2等。`AuthenticationManager`是处理认证的核心接口,而`UserDetailsService`则用于从数据源(如数据库)加载用户信息。 4. **权限控制**...
在本项目中,我们主要关注的是一个基于Spring MVC 4.1、Spring 4.1、MyBatis 3.2以及Spring Security 3.2的Maven环境的搭建过程。下面将详细介绍这些技术栈的核心概念、它们如何协同工作以及如何在实际开发环境中...
Spring Security 4.1 提供了一个简单的示例,用于展示如何使用 Java 配置实现基本的 Web 安全。这个示例通常包括定义一个 `WebSecurityConfigurerAdapter` 的子类,并重写相关方法以配置安全设置。 ##### 3.2 ...
- **The AuthenticationManager, ProviderManager**:提供了多种认证提供器,如 DaoAuthenticationProvider,用于处理用户认证过程中的各种操作。 #### 三、核心服务 - **UserDetailsService 实现**: - **内存...
1. **Spring Security基本概念** - **身份验证(Authentication)**:确认用户身份的过程,通常涉及用户名和密码。 - **授权(Authorization)**:确定已认证的用户可以访问哪些资源或执行哪些操作。 - **过滤器...