`

spring-security(十)基本认证过程

阅读更多
前言:
  在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-web源码所需jar包

    9. **spring-tx-3.1.2.RELEASE.jar**:提供了事务管理功能,对于需要在认证和授权过程中涉及数据库操作的情况,这个模块确保了操作的原子性和一致性。 10. **spring-security-config-3.1.2.RELEASE.jar**:提供了...

    spring-security Jar包

    它支持基本认证、表单登录、OAuth2等多种认证方式,确保只有经过验证的用户才能访问受保护的资源。 2. **授权**:授权是决定用户可以访问哪些资源的过程。Spring Security 提供基于角色的访问控制(RBAC),允许...

    spring-boot-security

    首先,让我们深入了解Spring Security的基本概念: 1. **认证(Authentication)**:这是确定用户身份的过程。在Spring Security中,一个`Authentication`对象包含了用户的身份信息。当我们输入用户名和密码并提交...

    spring security 4.0.0所需jar包

    例如,`spring-security-core`负责基本的认证和授权逻辑,`spring-security-web`处理与Web安全相关的请求过滤,而`spring-security-config`则简化了在Spring应用上下文中定义安全规则的过程。 使用时,开发者可以...

    spring-security-core-2.0.5.RELEASE.src

    - 引入了对HTTP基本认证和Digest认证的增强支持。 - 对RememberMe服务进行了改进,增强了安全性。 总结 Spring Security通过`spring-security-core`模块提供了全面的安全管理能力,它将认证、授权、会话管理和安全...

    spring-security4.1.3

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护...通过学习和理解这个示例,你可以掌握Spring Security的基本用法,并将其应用到自己的项目中,保护你的应用程序免受未授权访问的威胁。

    Spring-Security-Demo-master.zip

    5. **登录认证**:Spring Security提供了丰富的认证机制,包括基于表单的登录、HTTP基本认证、OAuth2等。在这个示例中,可能实现了自定义的登录页面,用户输入用户名和密码后,这些信息被发送到后端进行验证。验证...

    spring-security 官方文档 中文版

    - Spring Security 的验证机制允许开发者自定义认证过程,包括用户凭证的检查和存储。 - **直接设置 SecurityContextHolder 的内容**:允许在特定情况下直接设置用户的 Authentication 信息,从而绕过常规的身份...

    spring-security-reference.pdf

    描述了如何配置Spring Security提供表单登录和HTTP基本认证的支持。 - **登录后跳转和注销** 如何设置默认的登录成功跳转地址和注销处理逻辑,包括在退出用户时的处理选项。 在以上信息中,我们看到了Spring ...

    spring-security-oauth2文档

    由于Spring Boot 2.x中移除了对Spring Security OAuth的支持,因此Spring Security OAuth2 Boot 2.6.8的存在是为了方便迁移过程。它为从Spring Boot 1.x迁移到2.x时继续使用OAuth2提供了一个解决方案。 #### 六、第...

    spring-security-3.1.3.RELEASE.jar

    Spring Security支持多种认证方式,如基于表单的登录、HTTP基本认证、OAuth等。在这个版本中,你可以看到如何配置和实现这些不同的认证机制,并理解其背后的逻辑。 授权则是确定已认证的用户可以访问哪些资源。...

    spring-security-2.0.6. API和 jar包

    通过学习这个版本,我们可以了解Spring Security的基本架构和工作原理,为理解和使用更高级的版本奠定基础。同时,这个版本的API文档和JAR包对于修复旧系统中的安全问题或研究历史实现也具有参考价值。

    spring-security文档和jar包

    3. **Filter Chain**:Spring Security的核心是Filter Chain,它处理每个HTTP请求,执行认证和授权过程。 4. **表达式式访问控制**:使用Spring Expression Language (SpEL)可以在访问控制中实现更复杂的逻辑。 5....

    Spring-Security安全权限管理手册

    本节将详细介绍Spring Security的基本配置过程,以及如何通过Maven管理项目的依赖。 - **使用Maven管理依赖**:由于Spring框架本身体积较大(Spring.jar就有2M多),因此推荐使用Maven来管理项目的依赖。Maven可以...

    spring spring security2.5 jar

    1. **认证**:这是验证用户身份的过程,Spring Security提供了多种认证方式,如基于表单的登录、HTTP基本认证、JWT(JSON Web Tokens)等。在2.5版本中,可能会使用`UserDetailsService`接口来查询用户信息,以及`...

    spring-security-4.0 jar包

    Spring Security支持多种认证方式,如基于表单的登录、HTTP基本认证、OAuth2等。`AuthenticationManager`是处理认证的核心接口,而`UserDetailsService`则用于从数据源(如数据库)加载用户信息。 4. **权限控制**...

    springmvc4.1+spring4.1+mybatis3.2+spring-security3.2的maven环境搭建

    在本项目中,我们主要关注的是一个基于Spring MVC 4.1、Spring 4.1、MyBatis 3.2以及Spring Security 3.2的Maven环境的搭建过程。下面将详细介绍这些技术栈的核心概念、它们如何协同工作以及如何在实际开发环境中...

    spring-security-reference-4.1.1.RELEASE

    Spring Security 4.1 提供了一个简单的示例,用于展示如何使用 Java 配置实现基本的 Web 安全。这个示例通常包括定义一个 `WebSecurityConfigurerAdapter` 的子类,并重写相关方法以配置安全设置。 ##### 3.2 ...

    spring security3 中文版本

    - **The AuthenticationManager, ProviderManager**:提供了多种认证提供器,如 DaoAuthenticationProvider,用于处理用户认证过程中的各种操作。 #### 三、核心服务 - **UserDetailsService 实现**: - **内存...

    spring-security 案例

    1. **Spring Security基本概念** - **身份验证(Authentication)**:确认用户身份的过程,通常涉及用户名和密码。 - **授权(Authorization)**:确定已认证的用户可以访问哪些资源或执行哪些操作。 - **过滤器...

Global site tag (gtag.js) - Google Analytics