Authentication对象
2026/6/7 14:29:35 网站建设 项目流程

Authentication对象是身份认证体系中的核心对象,主要用于封装用户的身份信息、认证状态、权限凭证等核心数据,是判断 “当前访问者是谁、是否合法、拥有哪些权限” 的核心载体。

  1. 封装认证核心信息

    • 「谁」在访问系统?(用户唯一标识,如用户名、用户 ID)

    • 「凭什么」访问?(凭证,如密码、Token、证书、第三方授权码)

    • 「能做什么」?(权限 / 角色,如ROLE_ADMINPERMISSION_EDIT

  2. 标识认证状态

区分 “已认证” 和 “未认证”:

  • 未认证:isAuthenticated() == false(如游客访问);

  • 已认证:isAuthenticated() == true(如登录后的用户)。

作为权限控制的依据

框架或业务代码通过Authentication对象获取用户权限,判断是否允许访问某个接口 / 资源(如hasRole('ADMIN')本质是校验该对象中的权限集合)。

贯穿认证流程

从 “用户提交凭证” 到 “认证通过”,Authentication是流程的核心传递对象:

  • 认证前:构建「未认证」的Authentication(如封装用户名 + 密码);

  • 认证中:认证管理器(AuthenticationManager)校验凭证,通过后生成「已认证」的Authentication

  • 认证后:存储在安全上下文(SecurityContext)中,供全链路(控制器、服务层、过滤器)获取。

常见实现类

不同认证场景对应不同的Authentication实现:

实现类适用场景
UsernamePasswordAuthenticationToken用户名 + 密码登录(最常用)
JwtAuthenticationToken(扩展)JWT Token 认证
OAuth2AuthenticationTokenOAuth2 第三方登录(如微信、GitHub)
AnonymousAuthenticationToken匿名用户(未登录访问)
  • 获取当前登录用户的Authentication

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
  • 获取用户名

String userName = authentication.getName();
  • 获取用户权限

Collection<? extends GrantedAuthority> authorities = authentication.getAuthenorites();
  • 获取用户详情

UserDetails userDetails = (UserDetails)authentication.getPrincipal();

自定义认证的时候

  • 构建未认证的对象(封装用户的账号密码)

Authentication unauthenticated = new UsernamePasswordAuthenticationToken(username,password);
  • 交给认证管理器校验,返回已认证的authentication

Authentication authenticated = authenticationManager.authenticate(unauthenticated);
  • 存入安全上下文,完成登录

SecurityContextHolder.getContext().setAuthentication(authenticated);

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询