security

package
v0.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 2, 2026 License: MIT Imports: 23 Imported by: 0

README

security 包 — 安全认证与授权

所属层级: Infrastructure Layer
设计理念: 接口设计,灵活集成
设计灵感: Spring Security

概述

security 包提供全面的安全认证和授权功能,采用接口设计,方便快速集成。支持认证、授权、密码编码、过滤器链、Web 表达式等特性。

核心功能
功能 说明
认证 支持用户名密码、JWT、Basic 等多种认证方式
授权 基于角色和权限的访问控制
密码编码 BCrypt、SHA256 等多种密码编码器
过滤器链 可配置的安全过滤器链
Web 表达式 hasRole、hasAuthority 等表达式支持
用户管理 内存用户、DAO 用户详情服务
CORS 跨域资源共享支持
限流 请求速率限制

核心接口

Authentication 接口
type Authentication interface {
    GetPrincipal() any
    GetCredentials() any
    GetAuthorities() []string
    IsAuthenticated() bool
}
AuthenticationManager 接口
type AuthenticationManager interface {
    Authenticate(authentication Authentication) (Authentication, error)
}
UserDetailsService 接口
type UserDetailsService interface {
    LoadUserByUsername(username string) (UserDetails, error)
}
PasswordEncoder 接口
type PasswordEncoder interface {
    Encode(rawPassword string) string
    Matches(rawPassword, encodedPassword string) bool
}

快速开始

基本配置
package main

import (
    "net/http"
    "github.com/xudefa/enhance/security"
)

func main() {
    // 创建用户详情服务
    userDetailsService := security.NewInMemoryUserDetailsService()
    userDetailsService.CreateUser("admin", "hashed_password", []string{"ROLE_ADMIN", "ROLE_USER"})

    // 创建密码编码器
    passwordEncoder := security.NewBCryptPasswordEncoder()
    
    // 创建认证提供者和管理器
    authProvider := security.NewDaoAuthenticationProvider(userDetailsService, passwordEncoder)
    authManager := security.NewProviderManager(authProvider)

    // 配置 HTTP 安全
    sec := security.NewHttpSecurity()
    chain, err := sec.
        AuthenticationManager(authManager).
        UserDetailsService(userDetailsService).
        PasswordEncoder(passwordEncoder).
        Anonymous().
        AuthorizeRequests(func(reg security.AuthorizeRequests) {
            reg.AntMatchers("/public/**").PermitAll()
            reg.AntMatchers("/admin/**").HasRole("ADMIN")
            reg.AnyRequest().Authenticated()
        }).
        Build()
    if err != nil {
        panic(err)
    }

    // 集成 HTTP 服务器
    handler := security.NewSecurityFilterChainHandler(chain, yourAppHandler)
    http.ListenAndServe(":8080", handler)
}

认证授权执行流程

完整请求处理流程(从进入到出去)

当一个HTTP请求到达时,安全模块按以下流程处理:

HTTP请求 → SecurityFilterChainHandler → 过滤器链 → 业务Handler → HTTP响应
详细执行步骤

阶段1:请求进入(SecurityFilterChainHandler.ServeHTTP)

  1. SecurityFilterChainHandler.ServeHTTP(w, r) - 接收HTTP请求
  2. NewHttpRequestAdapter(r) - 将http.Request适配为SecurityRequest
  3. NewHttpResponseAdapter(w) - 将http.ResponseWriter适配为SecurityResponse
  4. securityFilterChain.DoFilter(ctx, request, response) - 开始执行过滤器链

阶段2:过滤器链执行(FilterChainProxy)

  1. FilterChainProxy.DoFilter() - 调用doFilterInternal(ctx, request, response, 0)
  2. 按索引顺序执行每个过滤器,每个过滤器通过chain.DoFilter()触发下一个

阶段3:各过滤器执行(按配置顺序)

  1. SecurityContextHolderFilter - 安全上下文处理

    • DoFilter() - 保存并清除全局认证信息
    • 执行后续过滤器链
    • 请求结束后恢复认证信息并清理
  2. AnonymousAuthenticationFilter - 匿名认证(如启用)

    • DoFilter() - 检查是否已认证
    • 未认证则创建AnonymousAuthenticationToken并设置到全局上下文
    • 继续执行后续过滤器链
  3. CORS过滤器 - 跨域处理(如启用)

    • CorsFilter.DoFilter() - 检查Origin头
    • 设置CORS响应头
    • 如果是OPTIONS预检请求,直接返回204
  4. 限流过滤器 - 请求限流(如启用)

    • RateLimitFilter.DoFilter() - 检查令牌桶
    • 超过限流则返回429
    • 否则继续执行后续过滤器链
  5. 认证过滤器 - 身份验证(根据配置选择)

    Basic认证

    • BasicAuthenticationFilter.DoFilter() - 检查Authorization头
    • 提取用户名密码,创建UsernamePasswordAuthenticationToken
    • 调用AuthenticationManager.Authenticate()进行认证
    • 认证成功后设置到全局安全上下文

    表单登录认证

    • UsernamePasswordAuthenticationFilter.DoFilter() - 检查POST请求和登录URL
    • 提取用户名密码,创建认证令牌
    • 调用AuthenticationManager.Authenticate()进行认证
    • 认证成功后重定向到成功URL

    JWT认证(jwt模块提供):

    • 从请求头提取JWT Token
    • 验证Token有效性
    • 认证成功后设置到全局安全上下文
  6. ExceptionTranslationFilter - 异常处理

    • DoFilter() - 执行后续过滤器链并捕获异常
    • 如果抛出ErrAccessDenied
      • 未认证用户:调用AuthenticationEntryPoint.Commence()返回401或重定向
      • 已认证用户:调用AccessDeniedHandler.Handle()返回403
  7. FilterSecurityInterceptor - 授权拦截

    • DoFilter() - 执行访问决策检查
    • SecurityMetadataSource.GetAttributes() - 获取URL对应的权限表达式
    • 如果已处理过该请求,直接放行
    • AccessDecisionManager.Decide() - 进行权限决策
    • 决策通过则继续,否则抛出ErrAccessDenied

阶段4:权限决策流程(AccessDecisionManager)

  1. AffirmativeBased.Decide() - 访问决策(默认使用肯定优先策略)
  2. 遍历所有投票者(Voter)进行投票:
    • WebExpressionVoter.Vote() - 解析Web表达式(permitAll、hasRole等)
    • AuthenticatedVoter.Vote() - 检查认证级别
    • RoleVoter.Vote() - 检查角色权限
  3. 根据投票结果决定是否允许访问

阶段5:请求处理完成

  1. 所有过滤器执行完毕,调用DefaultSecurityFilterChain.DoFilter()
  2. 返回到SecurityFilterChainHandler.ServeHTTP()
  3. 检查响应状态码,如果>=400则直接返回
  4. 从请求属性中获取认证信息:request.GetAttribute("security.currentAuthentication")
  5. 将认证信息注入request context:ContextWithAuthentication(r.Context(), auth)
  6. 调用业务Handler:nextHandler.ServeHTTP(w, r)

阶段6:业务处理

  1. 业务Handler从context获取认证信息:GetAuthenticationFromContext(ctx)
  2. 执行业务逻辑
  3. 返回HTTP响应
认证流程详解

Basic认证流程

请求携带Authorization: Basic base64(username:password)
  ↓
BasicAuthenticationFilter.DoFilter()
  ↓
提取用户名密码 → NewUsernamePasswordAuthenticationToken(username, password)
  ↓
AuthenticationManager.Authenticate(token)
  ↓
ProviderManager.Authenticate() → 遍历所有Provider
  ↓
DaoAuthenticationProvider.Authenticate()
  ↓
UserDetailsService.LoadUserByUsername() → 加载用户详情
  ↓
PasswordEncoder.Matches() → 验证密码
  ↓
检查用户状态(Enabled、AccountNonLocked等)
  ↓
认证成功 → NewAuthenticatedUsernamePasswordAuthenticationToken(user, authorities)
  ↓
SetAuthentication(authenticated) → 设置到全局安全上下文

表单登录认证流程

POST /login 携带username和password
  ↓
UsernamePasswordAuthenticationFilter.DoFilter()
  ↓
提取用户名密码 → NewUsernamePasswordAuthenticationToken(username, password)
  ↓
AuthenticationManager.Authenticate(token)
  ↓
(后续流程同Basic认证)
  ↓
认证成功 → 302重定向到defaultSuccessUrl
授权流程详解

URL权限检查流程

FilterSecurityInterceptor.DoFilter()
  ↓
SecurityMetadataSource.GetAttributes(request)
  ↓
根据URL匹配规则获取权限表达式
  例如:"/admin/**" → ["hasRole('ADMIN')"]
  ↓
AccessDecisionManager.Decide(auth, request, attributes)
  ↓
遍历所有Voter进行投票:
  - WebExpressionVoter: 解析"hasRole('ADMIN')"表达式
    ↓
    检查用户authorities是否包含"ROLE_ADMIN"
    ↓
    返回ACCESS_GRANTED或ACCESS_DENIED
  ↓
根据投票策略决定:
  - AffirmativeBased: 有一个GRANTED就通过
  - UnanimousBased: 所有都不DENIED才通过
  - ConsensusBased: 多数票决定
  ↓
通过 → 继续执行后续过滤器
拒绝 → 抛出ErrAccessDenied异常
过滤器执行顺序示例

默认过滤器链顺序(从上到下执行):

  1. SecurityContextHolderFilter - 安全上下文管理
  2. AnonymousAuthenticationFilter - 匿名认证
  3. CsrfFilter(如启用)- CSRF防护
  4. LogoutFilter(如配置)- 登出处理
  5. UsernamePasswordAuthenticationFilter(如启用)- 表单登录
  6. BasicAuthenticationFilter(如启用)- Basic认证
  7. ExceptionTranslationFilter - 异常转换
  8. FilterSecurityInterceptor - 授权拦截
  9. DefaultSecurityFilterChain - 默认链(放行到业务Handler)

API 参考

认证组件
组件 说明
Authentication 认证信息接口,包含 principal、credentials、authorities
AuthenticationManager 认证管理器,处理认证请求
AuthenticationProvider 认证提供者接口,定义认证逻辑
UsernamePasswordAuthenticationToken 用户名密码认证令牌
授权组件
组件 说明
AccessDecisionManager 访问决策管理器,决定资源访问权限
AccessDecisionVoter 访问决策投票者,投票决定访问权限
WebExpressionVoter Web 表达式投票者,支持 hasRole、hasAuthority 等
RoleVoter 角色投票者,检查角色权限
AuthenticatedVoter 认证投票者,检查认证级别
访问决策策略
策略 说明
AffirmativeBased 肯定优先,只要有投票者授予权限就通过
UnanimousBased 一致通过,所有投票者都不拒绝才通过
ConsensusBased 多数通过,多数投票者授予权限才通过
过滤器
过滤器 说明
FilterChainProxy 过滤器链代理
SecurityContextHolderFilter 安全上下文持有者过滤器
AnonymousAuthenticationFilter 匿名认证过滤器
ExceptionTranslationFilter 异常转换过滤器
FilterSecurityInterceptor 过滤器安全拦截器
BasicAuthenticationFilter Basic 认证过滤器
JwtAuthenticationFilter JWT 认证过滤器(jwt 模块提供)
过滤器执行顺序
  1. CORS 过滤器(如启用)
  2. 限流过滤器(如启用)
  3. JWT 认证过滤器(如启用 jwt 模块)
  4. SecurityContextHolder 过滤器
  5. Anonymous 认证过滤器
  6. ExceptionTranslation 过滤器
  7. FilterSecurityInterceptor
密码编码器
编码器 说明
NoOpPasswordEncoder 不编码,用于开发测试
BCryptPasswordEncoder SHA256 密码编码器
StandardPasswordEncoder 标准密码编码器,支持密钥加盐
DelegatingPasswordEncoder 委托密码编码器,支持多编码器
Web 表达式
表达式 说明
permitAll 允许所有人访问
denyAll 拒绝所有人访问
authenticated 仅允许已认证用户
hasRole('ROLE') 检查是否具有指定角色
hasAnyRole('ROLE1','ROLE2') 检查是否具有任一角色
hasAuthority('AUTHORITY') 检查是否具有指定权限
hasAnyAuthority('AUTH1','AUTH2') 检查是否具有任一权限
安全上下文
// 线程安全的认证信息存储
ctx := security.GetSecurityContext()
ctx.SetAuthentication(auth)
auth := ctx.Authentication()
ctx.ClearAuthentication()

// 全局认证快捷方法
security.SetAuthentication(auth)
security.GetAuthentication()
security.ClearAuthentication()

使用示例

URL 权限配置
security.AuthorizeRequests(func(reg security.AuthorizeRequests) {
    reg.AntMatchers("/public/**").PermitAll()
    reg.AntMatchers("/admin/**").HasRole("ADMIN")
    reg.AntMatchers("/user/**").HasAnyRole("ADMIN", "USER")
    reg.AntMatchers("/api/**").HasAuthority("ACCESS_API")
    reg.AnyRequest().Authenticated()
})
错误处理
// 错误类型
security.ErrAuthenticationFailed  // 认证失败
security.ErrAccessDenied          // 访问被拒绝
security.ErrUserNotFound          // 用户不存在
security.ErrBadCredentials        // 凭证错误
自动配置

通过 condition.OnProperty("security.enabled", "true") 控制,启用时自动配置以下组件:

# application.yaml
security:
  enabled: true
  cors:
    enabled: false
    allowed-origins: "*"
    allowed-methods: "GET,POST,PUT,DELETE,OPTIONS"
    allowed-headers: "Content-Type,Authorization,X-Requested-With"
    allow-credentials: false
    max-age: 3600
  rate-limit:
    enabled: false
    rate: 100          # 每秒请求数
    burst: 200         # 突发请求数
    exclude-paths: "/health,/actuator/health"
  rules: "/public/**->permitAll,/admin/**->hasRole('ADMIN'),/api/**->authenticated"
  login-url: "/login"
自动配置注册的 Bean
Bean ID 说明 是否可自定义
userDetailsService 用户详情服务
passwordEncoder 密码编码器(BCrypt)
authenticationManager 认证管理器
securityFilterChain 安全过滤器链
配置选项说明
配置项 说明 默认值
security.enabled 是否启用安全模块 false
security.cors.enabled 是否启用 CORS false
security.cors.allowed-origins 允许的源 *
security.cors.allowed-methods 允许的方法 GET,POST,PUT,DELETE,OPTIONS
security.cors.allowed-headers 允许的请求头 Content-Type,Authorization,X-Requested-With
security.cors.allow-credentials 是否允许凭证 false
security.cors.max-age 预检请求缓存时间(秒) 3600
security.rate-limit.enabled 是否启用限流 false
security.rate-limit.rate 限流速率(每秒) 100
security.rate-limit.burst 突发容量 200
security.rate-limit.exclude-paths 排除路径 /health,/actuator/health
security.rules URL 安全规则
security.login-url 登录页面 URL /login
与 JWT 模块集成

当同时启用安全模块和 JWT 模块时,JWT 认证过滤器会自动集成到安全过滤器链中:

# application.yaml
security:
  enabled: true
jwt:
  enabled: true
  secret-key: my-secret-key-123456
  exclude-paths: /login,/register

集成效果

  • JWT 过滤器会自动添加到安全过滤器链中
  • 支持配置排除路径(不需要 JWT 认证的路径)
  • 认证成功后,用户信息自动设置到安全上下文

最佳实践

1. 使用 BCrypt 密码编码器
// ✅ 推荐:使用 BCrypt 编码密码
passwordEncoder := security.NewBCryptPasswordEncoder()
hashedPassword := passwordEncoder.Encode("user_password")

// ⚠️ 不推荐:使用 NoOpPasswordEncoder(仅用于开发测试)
passwordEncoder := security.NewNoOpPasswordEncoder()
2. 合理配置 URL 权限
// ✅ 推荐:按最小权限原则配置 URL 权限
security.AuthorizeRequests(func(reg security.AuthorizeRequests) {
    reg.AntMatchers("/public/**", "/health").PermitAll()
    reg.AntMatchers("/admin/**").HasRole("ADMIN")
    reg.AntMatchers("/api/**").Authenticated()
    reg.AnyRequest().DenyAll()
})

// ⚠️ 不推荐:过度授权
security.AuthorizeRequests(func(reg security.AuthorizeRequests) {
    reg.AnyRequest().PermitAll()
})
3. 启用 CORS 和限流保护
// ✅ 推荐:生产环境启用 CORS 和限流
security:
  enabled: true
  cors:
    enabled: true
    allowed-origins: "https://yourdomain.com"
    allowed-methods: "GET,POST"
  rate-limit:
    enabled: true
    rate: 100
    burst: 200
4. 使用 JWT 认证
// ✅ 推荐:使用 JWT 进行无状态认证
jwt:
  enabled: true
  secret-key: my-secret-key-123456
  exclude-paths: /login,/register

// ⚠️ 不推荐:使用 Session 认证(有状态)
5. 自定义用户详情服务
// ✅ 推荐:实现自定义 UserDetailsService
type CustomUserDetailsService struct {
    db *sql.DB
}

func (s *CustomUserDetailsService) LoadUserByUsername(username string) (security.UserDetails, error) {
    // 从数据库加载用户
    return user, nil
}

// ⚠️ 不推荐:仅使用内存用户详情服务(生产环境)
userDetailsService := security.NewInMemoryUserDetailsService()

Documentation

Overview

Package security 提供安全功能支持,用于 enhance 框架。

Package security 提供安全功能支持,用于 enhance 框架。

该模块提供认证、授权、Web 安全过滤器、速率限制等安全机制,保护应用安全。 参考 Spring Security 的设计理念。

架构设计

  • SecurityContext: 安全上下文接口,管理认证信息
  • Authentication: 认证信息接口(别名 → authentication.Authentication)
  • AuthenticationManager: 认证管理器接口(别名 → authentication.AuthenticationManager)
  • AccessDecisionManager: 访问决策管理器接口(别名 → authorization.AccessDecisionManager)
  • UserDetailsService: 用户详情服务接口
  • UserDetails: 用户详情接口
  • PasswordEncoder: 密码编码器接口
  • SecurityFilter: 安全过滤器接口(别名 → filter.Filter)
  • SecurityFilterChain: 安全过滤器链接口(别名 → filter.SecurityFilterChain)
  • AccessDeniedHandler: 访问拒绝处理器接口
  • AuthenticationEntryPoint: 认证入口点接口
  • SecurityMetadataSource: 安全元数据源接口
  • SecurityRequest: 安全请求接口
  • SecurityResponse: 安全响应接口
  • GrantedAuthority: 授予权限接口
  • HttpSecurity: HTTP 安全配置接口
  • AuthorizeRequests: 授权请求配置接口
  • ExpressionInterceptUrlRegistry: URL 拦截注册接口
  • SecurityConfig: 安全配置接口
  • LogoutSuccessHandler: 登出成功处理器接口
  • RateLimiter: 速率限制器接口
  • CsrfTokenManager: CSRF 令牌管理器接口

核心功能

  • 认证: 支持用户名/密码、JWT、OAuth2 等认证方式
  • 授权: 支持基于角色和权限的授权检查
  • 安全过滤器: 支持请求拦截和安全检查
  • 速率限制: 防止恶意请求和暴力破解
  • CSRF 防护: 防止跨站请求伪造攻击

使用方式

配置安全策略:

httpSec := security.NewHttpSecurity()
httpSec.FormLogin("/login").
    Logout("/logout").
    Csrf().
    AuthorizeRequests(func(authz security.AuthorizeRequests) {
        authz.AntMatchers("/api/**").HasRole("ROLE_API")
        authz.AnyRequest().Authenticated()
    })

认证用户:

auth := security.Authenticate(username, password)
if auth != nil {
    // 认证成功
}

检查权限:

if security.HasPermission("user:read") {
    // 有权限访问
}

安全过滤器链

请求经过的过滤器链:

  • AuthenticationFilter: 认证过滤器
  • AuthorizationFilter: 授权过滤器
  • RateLimitFilter: 速率限制过滤器
  • CSRFTokenFilter: CSRF 防护过滤器

Package security 提供安全功能支持,用于 enhance 框架。

Package security 提供安全功能支持,用于 enhance 框架。

Package security 提供安全功能支持,用于 enhance 框架。 设计灵感来源于 Spring Security,采用接口设计模式,支持灵活的安全配置。

核心功能: - 认证(Authentication):验证用户身份 - 授权(Authorization):控制资源访问权限 - 安全上下文(SecurityContext):线程安全的认证信息存储 - 过滤器链(FilterChain):可配置的安全过滤器执行链

Index

Examples

Constants

View Source
const (
	ACCESS_GRANTED = 1  // 允许访问
	ACCESS_DENIED  = -1 // 拒绝访问
	ACCESS_ABSTAIN = 0  // 投票结果为 abstain 弃权
)

访问决策投票结果常量

View Source
const (
	// Casbin 配置
	CasbinEnabled          = "security.casbin.enabled"
	CasbinModelType        = "security.casbin.model-type"
	CasbinModelPath        = "security.casbin.model-path"
	CasbinModelText        = "security.casbin.model-text"
	CasbinPolicyType       = "security.casbin.policy-type"
	CasbinPolicyPath       = "security.casbin.policy-path"
	CasbinPolicyText       = "security.casbin.policy-text"
	CasbinAutoLoad         = "security.casbin.auto-load"
	CasbinAutoLoadInterval = "security.casbin.auto-load-interval"

	// casbin 字段常量
	CasbinLogFieldModel  = "model-path"
	CasbinLogFieldPolicy = "policy-path"
)
View Source
const (
	DefaultCasbinModelType        = "file"
	DefaultCasbinModelPath        = "config/casbin_model.conf"
	DefaultCasbinPolicyType       = "file"
	DefaultCasbinPolicyPath       = "config/casbin_policy.csv"
	DefaultCasbinAutoLoad         = false
	DefaultCasbinAutoLoadInterval = 5
)
View Source
const (
	SecurityContextHolderFilterOrder   = -1000
	AnonymousAuthenticationFilterOrder = 0
	ExceptionTranslationFilterOrder    = 0
	FilterSecurityInterceptorOrder     = 100
)

Security filter order constants

View Source
const (
	ConditionTrue = "true"
)
View Source
const DefaultRolePrefix = "ROLE_"

DefaultRolePrefix is the standard prefix prepended to role names.

View Source
const (
	// Security 配置
	SecurityEnabled = "security.enabled"
)

Variables

View Source
var (
	// ErrAuthenticationFailed 认证失败。
	ErrAuthenticationFailed = errors.New("authentication failed")
	// ErrAccessDenied 访问被拒绝。
	ErrAccessDenied = errors.New("access denied")
	// ErrUserNotFound 用户未找到。
	ErrUserNotFound = errors.New("user not found")
	// ErrBadCredentials 凭证无效。
	ErrBadCredentials = errors.New("bad credentials")
)

错误定义。

Functions

func ContextWithAuthentication

func ContextWithAuthentication(ctx context.Context, auth Authentication) context.Context

ContextWithAuthentication 将认证信息存入 context.Context。

Types

type AccessDecisionManager

type AccessDecisionManager = authorization.AccessDecisionManager

authorization 包的类型别名

type AccessDecisionVoter

type AccessDecisionVoter = authorization.AccessDecisionVoter

type AccessDeniedHandler

type AccessDeniedHandler interface {
	// Handle 处理访问拒绝。
	Handle(ctx context.Context, request SecurityRequest, response SecurityResponse, err error) error
}

AccessDeniedHandler 访问拒绝处理器接口。

处理访问被拒绝的情况,如权限不足。 可以自定义响应格式或重定向到错误页面。

type AffirmativeBased

type AffirmativeBased struct {
	// contains filtered or unexported fields
}

AffirmativeBased 肯定优先访问决策管理器

func NewAffirmativeBased

func NewAffirmativeBased(voters ...AccessDecisionVoter) *AffirmativeBased

func (*AffirmativeBased) AddVoter

func (m *AffirmativeBased) AddVoter(voter AccessDecisionVoter)

AddVoter 添加访问决策投票者到决策管理器。

func (*AffirmativeBased) Decide

func (m *AffirmativeBased) Decide(ctx context.Context, authentication authorization.Authentication, resource string, attributes []string) error

Decide 决定是否授予访问权限

func (*AffirmativeBased) SetAllowIfAllAbstainDecisions

func (m *AffirmativeBased) SetAllowIfAllAbstainDecisions(allow bool)

SetAllowIfAllAbstainDecisions 设置当所有投票者都弃权时是否允许访问。

func (*AffirmativeBased) Supports added in v0.0.3

func (m *AffirmativeBased) Supports(attribute string) bool

Supports 是否支持该决策属性

type AnonymousAuthenticationFilter

type AnonymousAuthenticationFilter struct {
	// contains filtered or unexported fields
}

AnonymousAuthenticationFilter 匿名认证过滤器

func NewAnonymousAuthenticationFilter

func NewAnonymousAuthenticationFilter() *AnonymousAuthenticationFilter

func (*AnonymousAuthenticationFilter) DoFilter

func (f *AnonymousAuthenticationFilter) DoFilter(ctx interface{}, request interface{}, response interface{}, chain filter.FilterChain) error

DoFilter 实现 filter.Filter 接口

func (*AnonymousAuthenticationFilter) Order added in v0.0.3

Order 实现 filter.Filter 接口

type AnonymousAuthenticationProvider

type AnonymousAuthenticationProvider struct{}

AnonymousAuthenticationProvider 匿名认证提供者

func NewAnonymousAuthenticationProvider

func NewAnonymousAuthenticationProvider() *AnonymousAuthenticationProvider

NewAnonymousAuthenticationProvider 创建匿名认证提供者

func (*AnonymousAuthenticationProvider) Authenticate

Authenticate 为匿名用户创建认证令牌

func (*AnonymousAuthenticationProvider) Supports

Supports 只支持UsernamePasswordAuthenticationToken类型

type AnonymousAuthenticationToken

type AnonymousAuthenticationToken struct {
	// contains filtered or unexported fields
}

AnonymousAuthenticationToken 匿名认证令牌

func NewAnonymousAuthenticationToken

func NewAnonymousAuthenticationToken(key string, principal any, authorities []string) *AnonymousAuthenticationToken

func (*AnonymousAuthenticationToken) Authenticated

func (t *AnonymousAuthenticationToken) Authenticated() bool

Authenticated 返回匿名认证是否已通过验证。

func (*AnonymousAuthenticationToken) Authorities

func (t *AnonymousAuthenticationToken) Authorities() []string

Authorities 返回匿名认证的授权列表。

func (*AnonymousAuthenticationToken) Credentials

func (t *AnonymousAuthenticationToken) Credentials() any

Credentials 返回匿名认证的凭据(始终为 nil)。

func (*AnonymousAuthenticationToken) Name

Name 返回匿名认证主体的名称字符串。

func (*AnonymousAuthenticationToken) Principal

func (t *AnonymousAuthenticationToken) Principal() any

Principal 返回匿名认证主体的身份信息。

type AuthenticatedVoter

type AuthenticatedVoter struct{}

AuthenticatedVoter 认证投票者

func NewAuthenticatedVoter

func NewAuthenticatedVoter() *AuthenticatedVoter

func (*AuthenticatedVoter) Supports added in v0.0.3

func (v *AuthenticatedVoter) Supports(attribute string) bool

Supports 是否支持该属性

func (*AuthenticatedVoter) Vote

func (v *AuthenticatedVoter) Vote(ctx context.Context, authentication authorization.Authentication, resource string, attributes []string) int

Vote 投票决定访问权限

type Authentication

type Authentication = authentication.Authentication

authentication 包的类型别名

Example

ExampleAuthentication 使用示例:用户认证 展示完整的认证流程

userDetailsService := NewInMemoryUserDetailsService()
userDetailsService.CreateUser("admin", "admin123", []string{"ROLE_ADMIN", "ROLE_USER"})

passwordEncoder := NewNoOpPasswordEncoder()
authProvider := NewDaoAuthenticationProvider(userDetailsService, passwordEncoder, log.Build())
authManager := NewProviderManager(authProvider)

ctx := context.Background()

authToken := NewUsernamePasswordAuthenticationToken("admin", "admin123")
authenticated, err := authManager.Authenticate(ctx, authToken)
if err != nil {
	fmt.Printf("Authentication failed: %v\n", err)
	return
}

fmt.Printf("Authentication successful!\n")
fmt.Printf("Principal: %v\n", authenticated.Principal())
fmt.Printf("Authorities: %v\n", authenticated.Authorities())
fmt.Printf("Authenticated: %v\n", authenticated.Authenticated())
fmt.Printf("Name: %s\n", extractPrincipalName(authenticated))

func GetAuthenticationFromContext

func GetAuthenticationFromContext(ctx context.Context) Authentication

GetAuthenticationFromContext 从 context.Context 获取认证信息。

type AuthenticationEntryPoint

type AuthenticationEntryPoint interface {
	// Commence 开始认证流程。
	Commence(ctx context.Context, request SecurityRequest, response SecurityResponse, err error) error
}

AuthenticationEntryPoint 认证入口点接口。

处理未认证用户访问受保护资源的情况。 通常返回 401 状态码或重定向到登录页面。

type AuthenticationManager

type AuthenticationManager = authentication.AuthenticationManager

type AuthenticationProvider

type AuthenticationProvider = authentication.AuthenticationProvider

type AuthenticationToken added in v0.0.3

type AuthenticationToken = authentication.AuthenticationToken

type AuthorizeRequests

type AuthorizeRequests interface {
	// AntMatchers 配置 Ant 风格的路径匹配器。
	AntMatchers(patterns ...string) ExpressionInterceptUrlRegistry
	// AnyRequest 配置所有请求。
	AnyRequest() ExpressionInterceptUrlRegistry
}

AuthorizeRequests 授权请求配置接口。

配置 URL 路径的访问规则。

type BasicAuthenticationEntryPointWithRealm

type BasicAuthenticationEntryPointWithRealm struct {
	// contains filtered or unexported fields
}

BasicAuthenticationEntryPointWithRealm Basic认证入口点(带Realm)

func NewBasicAuthenticationEntryPointWithRealm

func NewBasicAuthenticationEntryPointWithRealm(realmName string, logger log.Logger) *BasicAuthenticationEntryPointWithRealm

func (*BasicAuthenticationEntryPointWithRealm) Commence

Commence 发送 401 Unauthorized 响应并设置 WWW-Authenticate 头为 Basic realm。

type BasicAuthenticationFilter

type BasicAuthenticationFilter struct {
	// contains filtered or unexported fields
}

BasicAuthenticationFilter Basic认证过滤器

func NewBasicAuthenticationFilter

func NewBasicAuthenticationFilter(authenticationManager AuthenticationManager) *BasicAuthenticationFilter

func (*BasicAuthenticationFilter) DoFilter

func (f *BasicAuthenticationFilter) DoFilter(ctx interface{}, request interface{}, response interface{}, chain filter.FilterChain) error

DoFilter 处理Basic认证

func (*BasicAuthenticationFilter) Order added in v0.0.3

func (f *BasicAuthenticationFilter) Order() int

Order 实现 filter.Filter 接口

type BasicAuthenticationFilterWithRealm

type BasicAuthenticationFilterWithRealm struct {
	// contains filtered or unexported fields
}

BasicAuthenticationFilterWithRealm 带Realm的Basic认证过滤器

func NewBasicAuthenticationFilterWithRealm

func NewBasicAuthenticationFilterWithRealm(authManager AuthenticationManager, realmName string, logger log.Logger) *BasicAuthenticationFilterWithRealm

func (*BasicAuthenticationFilterWithRealm) DoFilter

func (f *BasicAuthenticationFilterWithRealm) DoFilter(ctx interface{}, request interface{}, response interface{}, chain filter.FilterChain) error

DoFilter 实现 filter.Filter 接口

func (*BasicAuthenticationFilterWithRealm) Order added in v0.0.3

Order 实现 filter.Filter 接口

type CasbinEnforcer

type CasbinEnforcer interface {
	Enforce(ctx context.Context, subject, object, action string) (bool, error)
	AddPolicy(ctx context.Context, sub, obj, act string) error
	RemovePolicy(ctx context.Context, sub, obj, act string) error
	GetPolicy(ctx context.Context) ([][]string, error)
	LoadPolicy(ctx context.Context) error
	SavePolicy(ctx context.Context) error
}

CasbinEnforcer Casbin 执行器接口。

type CasbinVoter

type CasbinVoter struct {
	// contains filtered or unexported fields
}

CasbinVoter Casbin 投票者实现。

func NewCasbinVoter

func NewCasbinVoter(enforcer CasbinEnforcer) *CasbinVoter

func (*CasbinVoter) Supports

func (v *CasbinVoter) Supports(attribute string) bool

Supports 是否支持该属性。

func (*CasbinVoter) Vote

func (v *CasbinVoter) Vote(ctx context.Context, authentication authorization.Authentication, resource string, attributes []string) int

Vote 投票决定是否授予访问权限。 resource 格式为 "METHOD:URI"(由 FilterSecurityInterceptor 生成)

type ConsensusBased

type ConsensusBased struct {
	// contains filtered or unexported fields
}

ConsensusBased 共识优先访问决策管理器

func NewConsensusBased

func NewConsensusBased(voters ...AccessDecisionVoter) *ConsensusBased

func (*ConsensusBased) AddVoter

func (m *ConsensusBased) AddVoter(voter AccessDecisionVoter)

AddVoter 添加访问决策投票者到决策管理器。

func (*ConsensusBased) Decide

func (m *ConsensusBased) Decide(ctx context.Context, authentication authorization.Authentication, resource string, attributes []string) error

Decide 决定是否授予访问权限

func (*ConsensusBased) SetAllowIfAllAbstainDecisions

func (m *ConsensusBased) SetAllowIfAllAbstainDecisions(allow bool)

SetAllowIfAllAbstainDecisions 设置当所有投票者都弃权时是否允许访问。

func (*ConsensusBased) SetAllowIfEqualGrantedDenied

func (m *ConsensusBased) SetAllowIfEqualGrantedDenied(allow bool)

SetAllowIfEqualGrantedDenied 设置当授予和拒绝票数相等时是否允许访问。

func (*ConsensusBased) Supports added in v0.0.3

func (m *ConsensusBased) Supports(attribute string) bool

Supports 是否支持该决策属性

type CookieClearingLogoutHandler

type CookieClearingLogoutHandler struct {
	// contains filtered or unexported fields
}

CookieClearingLogoutHandler Cookie清除登出处理器

func NewCookieClearingLogoutHandler

func NewCookieClearingLogoutHandler(cookieNames ...string) *CookieClearingLogoutHandler

func (*CookieClearingLogoutHandler) Logout

func (h *CookieClearingLogoutHandler) Logout(ctx context.Context, request SecurityRequest, response SecurityResponse, authentication Authentication)

type CookieCsrfTokenRepository

type CookieCsrfTokenRepository struct {
	// contains filtered or unexported fields
}

CookieCsrfTokenRepository 基于Cookie的CSRF令牌仓库

func NewCookieCsrfTokenRepository

func NewCookieCsrfTokenRepository() *CookieCsrfTokenRepository

func (*CookieCsrfTokenRepository) ClearToken

func (r *CookieCsrfTokenRepository) ClearToken(ctx context.Context, request SecurityRequest, response SecurityResponse)

func (*CookieCsrfTokenRepository) GenerateToken

func (r *CookieCsrfTokenRepository) GenerateToken(ctx context.Context, request SecurityRequest) (*CsrfToken, error)

func (*CookieCsrfTokenRepository) LoadToken added in v0.0.4

LoadToken 从 Cookie 中加载已存在的 CSRF 令牌,未找到时返回 nil。

func (*CookieCsrfTokenRepository) SaveToken

func (r *CookieCsrfTokenRepository) SaveToken(ctx context.Context, request SecurityRequest, response SecurityResponse, token *CsrfToken)

func (*CookieCsrfTokenRepository) ValidateToken

func (r *CookieCsrfTokenRepository) ValidateToken(ctx context.Context, request SecurityRequest, token string) bool

type CorsConfig

type CorsConfig struct {
	AllowedOrigins   []string
	AllowedMethods   []string
	AllowedHeaders   []string
	ExposedHeaders   []string
	AllowCredentials bool
	MaxAge           int
	Log              log.Logger
}

CorsConfig CORS配置

type CorsFilter

type CorsFilter struct {
	// contains filtered or unexported fields
}

CorsFilter CORS过滤器

func NewCorsFilter

func NewCorsFilter(config CorsConfig) *CorsFilter

func (*CorsFilter) DoFilter

func (f *CorsFilter) DoFilter(ctx interface{}, request interface{}, response interface{}, chain filter.FilterChain) error

DoFilter 实现 filter.Filter 接口

func (*CorsFilter) Order added in v0.0.3

func (f *CorsFilter) Order() int

Order 实现 filter.Filter 接口

type CsrfAuthenticationStrategy

type CsrfAuthenticationStrategy struct {
	// contains filtered or unexported fields
}

CsrfAuthenticationStrategy CSRF 令牌会话认证策略

func NewCsrfAuthenticationStrategy

func NewCsrfAuthenticationStrategy() *CsrfAuthenticationStrategy

func (*CsrfAuthenticationStrategy) OnAuthentication

func (s *CsrfAuthenticationStrategy) OnAuthentication(ctx context.Context, authentication Authentication, request SecurityRequest, response SecurityResponse)

OnAuthentication 认证成功后生成新的 CSRF 令牌

type CsrfFilter

type CsrfFilter struct {
	// contains filtered or unexported fields
}

CsrfFilter CSRF防护过滤器。

在表单提交时验证 CSRF Token,防止跨站请求伪造攻击。

func NewCsrfFilter

func NewCsrfFilter(tokenRepository CsrfTokenRepository) *CsrfFilter

NewCsrfFilter 创建 CSRF 防护过滤器。

参数:

  • tokenRepository: CSRF Token 存储仓库,用于生成和验证 Token

返回:

  • *CsrfFilter: CSRF 过滤器实例

panic: tokenRepository 为 nil 时触发 panic

func (*CsrfFilter) AddExcludePath

func (f *CsrfFilter) AddExcludePath(paths ...string) error

AddExcludePath 添加不需要 CSRF 防护的路径。

参数:

  • paths: 要排除的路径列表,必须以 "/" 开头

返回:

  • error: 路径格式错误时返回错误

func (*CsrfFilter) DoFilter

func (f *CsrfFilter) DoFilter(ctx interface{}, request interface{}, response interface{}, chain filter.FilterChain) error

DoFilter 实现 filter.Filter 接口

func (*CsrfFilter) Order added in v0.0.3

func (f *CsrfFilter) Order() int

Order 实现 filter.Filter 接口

type CsrfToken

type CsrfToken struct {
	Identifier string // 令牌标识符
	Value      string // 令牌值
}

CsrfToken CSRF 令牌结构。

type CsrfTokenManager

type CsrfTokenManager struct {
	// contains filtered or unexported fields
}

CsrfTokenManager CSRF 令牌管理器

func NewCsrfTokenManager

func NewCsrfTokenManager() *CsrfTokenManager

func (*CsrfTokenManager) GenerateToken

func (m *CsrfTokenManager) GenerateToken(principal string) (string, error)

func (*CsrfTokenManager) RemoveToken

func (m *CsrfTokenManager) RemoveToken(principal string)

func (*CsrfTokenManager) ValidateToken

func (m *CsrfTokenManager) ValidateToken(principal, token string) bool

type CsrfTokenRepository

type CsrfTokenRepository interface {
	// GenerateToken 生成新的 CSRF 令牌。
	GenerateToken(ctx context.Context, request SecurityRequest) (*CsrfToken, error)
	// LoadToken 加载当前会话已存在的 CSRF 令牌,会话中不存在时返回 nil。
	LoadToken(ctx context.Context, request SecurityRequest) (*CsrfToken, error)
	// ValidateToken 验证 CSRF 令牌。
	ValidateToken(ctx context.Context, request SecurityRequest, token string) bool
	// SaveToken 保存 CSRF 令牌到响应。
	SaveToken(ctx context.Context, request SecurityRequest, response SecurityResponse, token *CsrfToken)
	// ClearToken 清除 CSRF 令牌。
	ClearToken(ctx context.Context, request SecurityRequest, response SecurityResponse)
}

CsrfTokenRepository CSRF 令牌仓库接口。

管理 CSRF 令牌的生成、验证、保存和清除。

type DaoAuthenticationProvider

type DaoAuthenticationProvider struct {
	// contains filtered or unexported fields
}

DaoAuthenticationProvider 基于DAO的认证提供者

func NewDaoAuthenticationProvider

func NewDaoAuthenticationProvider(userDetailsService UserDetailsService, passwordEncoder PasswordEncoder, logger log.Logger) *DaoAuthenticationProvider

NewDaoAuthenticationProvider 创建DAO认证提供者

func (*DaoAuthenticationProvider) Authenticate

Authenticate 执行认证逻辑

func (*DaoAuthenticationProvider) Supports

Supports 判断是否支持该认证方式

type DefaultLogoutSuccessHandler

type DefaultLogoutSuccessHandler struct {
	// contains filtered or unexported fields
}

DefaultLogoutSuccessHandler 默认登出成功处理器

func NewDefaultLogoutSuccessHandler

func NewDefaultLogoutSuccessHandler(defaultTargetUrl string) *DefaultLogoutSuccessHandler

func (*DefaultLogoutSuccessHandler) OnLogoutSuccess

func (h *DefaultLogoutSuccessHandler) OnLogoutSuccess(ctx context.Context, request SecurityRequest, response SecurityResponse, authentication Authentication)

type DefaultSecurityFilterChain

type DefaultSecurityFilterChain struct{}

DefaultSecurityFilterChain 默认安全过滤器链

func (*DefaultSecurityFilterChain) DoFilter

func (c *DefaultSecurityFilterChain) DoFilter(ctx interface{}, request interface{}, response interface{}) error

DoFilter 实现 filter.SecurityFilterChain 接口,默认空操作。

func (*DefaultSecurityFilterChain) GetFilters added in v0.0.3

func (c *DefaultSecurityFilterChain) GetFilters() []SecurityFilter

GetFilters 返回该过滤器链中的所有安全过滤器(默认返回空)。

func (*DefaultSecurityFilterChain) Matches added in v0.0.3

func (c *DefaultSecurityFilterChain) Matches(request interface{}) bool

Matches 实现 filter.SecurityFilterChain 接口,默认匹配所有请求。

type DelegatingPasswordEncoder

type DelegatingPasswordEncoder struct {
	// contains filtered or unexported fields
}

DelegatingPasswordEncoder 委托密码编码器 职责:支持多种编码器,可根据编码ID选择合适的编码器 编码格式:{编码器ID}encodedPassword,例如:{bcrypt}$2a$10$... 优势:支持密码编码算法迁移,历史密码无需重新编码

func NewDelegatingPasswordEncoder

func NewDelegatingPasswordEncoder(idForEncode string, passwordEncoders map[string]PasswordEncoder) *DelegatingPasswordEncoder

NewDelegatingPasswordEncoder 创建委托密码编码器 idForEncode: 默认使用的编码器ID passwordEncoders: 可用的编码器映射

func (*DelegatingPasswordEncoder) Encode

func (e *DelegatingPasswordEncoder) Encode(rawPassword string) string

Encode 使用默认编码器编码密码

func (*DelegatingPasswordEncoder) Matches

func (e *DelegatingPasswordEncoder) Matches(rawPassword, encodedPassword string) bool

Matches 根据编码ID选择合适的编码器进行匹配

type EnhancedRateLimitFilter

type EnhancedRateLimitFilter struct {
	// contains filtered or unexported fields
}

EnhancedRateLimitFilter 增强版限流过滤器

func NewEnhancedRateLimitFilter

func NewEnhancedRateLimitFilter(strategy RateLimitStrategy, opts ...EnhancedRateLimitOption) *EnhancedRateLimitFilter

func (*EnhancedRateLimitFilter) DoFilter

func (f *EnhancedRateLimitFilter) DoFilter(ctx interface{}, request interface{}, response interface{}, chain filter.FilterChain) error

DoFilter 实现 filter.Filter 接口

func (*EnhancedRateLimitFilter) Order added in v0.0.3

func (f *EnhancedRateLimitFilter) Order() int

Order 实现 filter.Filter 接口

type EnhancedRateLimitOption

type EnhancedRateLimitOption func(*EnhancedRateLimitFilter)

func WithExcludePaths

func WithExcludePaths(paths ...string) EnhancedRateLimitOption

func WithOnRateLimit

func WithOnRateLimit(fn func(ctx context.Context, request SecurityRequest, response SecurityResponse)) EnhancedRateLimitOption

func WithTrustedProxies added in v0.0.4

func WithTrustedProxies(proxies ...string) EnhancedRateLimitOption

WithTrustedProxies 设置可信代理 IP/CIDR 列表。 启用后仅信任来自这些代理的转发头,防止客户端伪造 IP 绕过限流。

type ExceptionTranslationFilter

type ExceptionTranslationFilter struct {
	// contains filtered or unexported fields
}

ExceptionTranslationFilter 异常转换过滤器

func NewExceptionTranslationFilter

func NewExceptionTranslationFilter(accessDeniedHandler AccessDeniedHandler, authenticationEntryPoint AuthenticationEntryPoint) *ExceptionTranslationFilter

func (*ExceptionTranslationFilter) DoFilter

func (f *ExceptionTranslationFilter) DoFilter(ctx interface{}, request interface{}, response interface{}, chain filter.FilterChain) error

DoFilter 实现 filter.Filter 接口

func (*ExceptionTranslationFilter) Order added in v0.0.3

func (f *ExceptionTranslationFilter) Order() int

Order 实现 filter.Filter 接口

type ExpressionBasedFilterInvocationSecurityMetadataSource

type ExpressionBasedFilterInvocationSecurityMetadataSource struct {
	// contains filtered or unexported fields
}

ExpressionBasedFilterInvocationSecurityMetadataSource 基于表达式的过滤器调用安全元数据源

func NewExpressionBasedFilterInvocationSecurityMetadataSource

func NewExpressionBasedFilterInvocationSecurityMetadataSource() *ExpressionBasedFilterInvocationSecurityMetadataSource

NewExpressionBasedFilterInvocationSecurityMetadataSource 创建基于表达式的过滤器调用安全元数据源实例。

func (*ExpressionBasedFilterInvocationSecurityMetadataSource) AddMapping

func (s *ExpressionBasedFilterInvocationSecurityMetadataSource) AddMapping(pattern string, attributes []string)

AddMapping 添加 URL 模式与安全属性的映射关系。

func (*ExpressionBasedFilterInvocationSecurityMetadataSource) GetAttributes

GetAttributes 根据请求获取匹配的安全属性列表。

type ExpressionInterceptUrlRegistry

type ExpressionInterceptUrlRegistry interface {
	// PermitAll 允许所有访问。
	PermitAll() HttpSecurity
	// Authenticated 需要认证。
	Authenticated() HttpSecurity
	// HasRole 需要指定角色。
	HasRole(role string) HttpSecurity
	// HasAnyRole 需要指定角色之一。
	HasAnyRole(roles ...string) HttpSecurity
	// HasAuthority 需要指定权限。
	HasAuthority(authority string) HttpSecurity
	// HasAnyAuthority 需要指定权限之一。
	HasAnyAuthority(authorities ...string) HttpSecurity
	// DenyAll 拒绝所有访问。
	DenyAll() HttpSecurity
}

ExpressionInterceptUrlRegistry URL 拦截注册接口。

配置特定 URL 的访问表达式。

type FilterChainProxy

type FilterChainProxy struct {
	// contains filtered or unexported fields
}

FilterChainProxy 过滤器链代理

func NewFilterChainProxy

func NewFilterChainProxy(filters []SecurityFilter, chain SecurityFilterChain) *FilterChainProxy

NewFilterChainProxy 创建过滤器链代理实例。

参数:

  • filters: 安全过滤器列表
  • chain: 最终的安全过滤器链

func (*FilterChainProxy) DoFilter

func (p *FilterChainProxy) DoFilter(ctx interface{}, request interface{}, response interface{}) error

DoFilter 实现 filter.SecurityFilterChain 接口

func (*FilterChainProxy) GetFilters added in v0.0.3

func (p *FilterChainProxy) GetFilters() []filter.Filter

GetFilters 实现 filter.SecurityFilterChain 接口

func (*FilterChainProxy) Matches added in v0.0.3

func (p *FilterChainProxy) Matches(request interface{}) bool

Matches 实现 filter.SecurityFilterChain 接口(FilterChainProxy 匹配所有请求)

type FilterSecurityInterceptor

type FilterSecurityInterceptor struct {
	// contains filtered or unexported fields
}

FilterSecurityInterceptor 过滤器安全拦截器

func NewFilterSecurityInterceptor

func NewFilterSecurityInterceptor(securityMetadataSource SecurityMetadataSource, accessDecisionManager AccessDecisionManager, authenticationManager AuthenticationManager) *FilterSecurityInterceptor

func (*FilterSecurityInterceptor) DoFilter

func (f *FilterSecurityInterceptor) DoFilter(ctx interface{}, request interface{}, response interface{}, chain filter.FilterChain) error

DoFilter 实现 filter.Filter 接口

func (*FilterSecurityInterceptor) Order added in v0.0.3

func (f *FilterSecurityInterceptor) Order() int

Order 实现 filter.Filter 接口

func (*FilterSecurityInterceptor) SetAccessDecisionManager

func (f *FilterSecurityInterceptor) SetAccessDecisionManager(manager AccessDecisionManager)

SetAccessDecisionManager 设置访问决策管理器。

func (*FilterSecurityInterceptor) SetAuthenticationManager

func (f *FilterSecurityInterceptor) SetAuthenticationManager(manager AuthenticationManager)

SetAuthenticationManager 设置认证管理器。

func (*FilterSecurityInterceptor) SetSecurityMetadataSource

func (f *FilterSecurityInterceptor) SetSecurityMetadataSource(source SecurityMetadataSource)

SetSecurityMetadataSource 设置安全元数据源。

type FixedWindowCounterRateLimiter

type FixedWindowCounterRateLimiter struct {
	// contains filtered or unexported fields
}

FixedWindowCounterRateLimiter 固定窗口计数器限流器

func NewFixedWindowCounterRateLimiter

func NewFixedWindowCounterRateLimiter(windowSize time.Duration, maxRequests int) *FixedWindowCounterRateLimiter

func (*FixedWindowCounterRateLimiter) Allow

Allow 检查指定 key 的请求是否允许通过(固定窗口计数算法)。

func (*FixedWindowCounterRateLimiter) Cleanup

func (r *FixedWindowCounterRateLimiter) Cleanup()

Cleanup 清理固定窗口中过期的计数器数据,释放内存。

func (*FixedWindowCounterRateLimiter) Close added in v0.0.4

func (r *FixedWindowCounterRateLimiter) Close()

Close 关闭固定窗口计数器限流器,停止后台清理协程。

type GrantedAuthority

type GrantedAuthority interface {
	// Authority 返回权限字符串。
	Authority() string
}

GrantedAuthority 授予权限接口。

代表一个具体的权限,如 "ROLE_ADMIN"、"ROLE_USER"。

func NewAuthority

func NewAuthority(authority string) GrantedAuthority

NewAuthority 创建权限(GrantedAuthority接口)

type Http401UnauthorizedEntryPoint

type Http401UnauthorizedEntryPoint struct{}

Http401UnauthorizedEntryPoint 401未认证入口点

func NewHttp401UnauthorizedEntryPoint

func NewHttp401UnauthorizedEntryPoint() *Http401UnauthorizedEntryPoint

func (*Http401UnauthorizedEntryPoint) Commence

func (e *Http401UnauthorizedEntryPoint) Commence(ctx context.Context, request SecurityRequest, response SecurityResponse, err error) error

Commence 发送 401 Unauthorized 响应给客户端。

type Http403ForbiddenAccessDeniedHandler

type Http403ForbiddenAccessDeniedHandler struct{}

Http403ForbiddenAccessDeniedHandler 403禁止访问拒绝处理器

func NewHttp403ForbiddenAccessDeniedHandler

func NewHttp403ForbiddenAccessDeniedHandler() *Http403ForbiddenAccessDeniedHandler

func (*Http403ForbiddenAccessDeniedHandler) Handle

Handle 处理访问被拒绝的情况,发送 403 Forbidden 响应给客户端。

type Http403ForbiddenEntryPoint

type Http403ForbiddenEntryPoint struct{}

Http403ForbiddenEntryPoint 403禁止访问入口点

func NewHttp403ForbiddenEntryPoint

func NewHttp403ForbiddenEntryPoint() *Http403ForbiddenEntryPoint

func (*Http403ForbiddenEntryPoint) Commence

func (e *Http403ForbiddenEntryPoint) Commence(ctx context.Context, request SecurityRequest, response SecurityResponse, err error) error

Commence 发送 403 Forbidden 响应给客户端。

type HttpRequestAdapter

type HttpRequestAdapter struct {
	// contains filtered or unexported fields
}

HttpRequestAdapter HTTP请求适配器

func NewHttpRequestAdapter

func NewHttpRequestAdapter(request *http.Request) *HttpRequestAdapter

func (*HttpRequestAdapter) GetAttribute

func (a *HttpRequestAdapter) GetAttribute(key string) (any, bool)

GetAttribute 获取请求上下文的指定属性值。

func (*HttpRequestAdapter) GetHeader

func (a *HttpRequestAdapter) GetHeader(key string) string

GetHeader 返回 HTTP 请求头的指定键对应的值。

func (*HttpRequestAdapter) GetMethod

func (a *HttpRequestAdapter) GetMethod() string

GetMethod 返回 HTTP 请求方法(GET、POST 等)。

func (*HttpRequestAdapter) GetURI

func (a *HttpRequestAdapter) GetURI() string

GetURI 返回 HTTP 请求的 URI 路径。

func (*HttpRequestAdapter) RemoteAddress added in v0.0.4

func (a *HttpRequestAdapter) RemoteAddress() string

RemoteAddress 返回直连对端的地址。

func (*HttpRequestAdapter) SetAttribute

func (a *HttpRequestAdapter) SetAttribute(key string, value any)

SetAttribute 设置请求上下文的属性键值对。

type HttpResponseAdapter

type HttpResponseAdapter struct {
	// contains filtered or unexported fields
}

HttpResponseAdapter HTTP响应适配器

func NewHttpResponseAdapter

func NewHttpResponseAdapter(responseWriter http.ResponseWriter) *HttpResponseAdapter

func (*HttpResponseAdapter) SetHeader

func (a *HttpResponseAdapter) SetHeader(key, value string)

SetHeader 设置 HTTP 响应头的指定键值对。

func (*HttpResponseAdapter) SetStatusCode

func (a *HttpResponseAdapter) SetStatusCode(code int)

SetStatusCode 设置 HTTP 响应状态码。

WriteHeader 延迟到首次写入响应体时提交,确保 SetStatusCode 之后设置的 响应头仍能生效(net/http 中 WriteHeader 之后再修改 Header 无效)。

func (*HttpResponseAdapter) StatusCode

func (a *HttpResponseAdapter) StatusCode() int

StatusCode 返回已设置的 HTTP 响应状态码。

func (*HttpResponseAdapter) Write

func (a *HttpResponseAdapter) Write(data []byte) error

Write 写入 HTTP 响应体数据。

type HttpSecurity

type HttpSecurity interface {
	// AuthenticationManager 设置认证管理器。
	AuthenticationManager(authManager AuthenticationManager) HttpSecurity
	// UserDetailsService 设置用户详情服务。
	UserDetailsService(userDetailsService UserDetailsService) HttpSecurity
	// PasswordEncoder 设置密码编码器。
	PasswordEncoder(encoder PasswordEncoder) HttpSecurity
	// AccessDecisionManager 设置访问决策管理器。
	AccessDecisionManager(manager AccessDecisionManager) HttpSecurity
	// SecurityMetadataSource 设置安全元数据源。
	SecurityMetadataSource(source SecurityMetadataSource) HttpSecurity
	// AuthorizeRequests 配置授权规则。
	AuthorizeRequests(config func(authorizer AuthorizeRequests)) HttpSecurity
	// AddFilter 添加过滤器。
	AddFilter(filter SecurityFilter) HttpSecurity
	// AddFilterBefore 在指定过滤器之前添加过滤器。
	AddFilterBefore(filter SecurityFilter, beforeFilter SecurityFilter) HttpSecurity
	// AddFilterAfter 在指定过滤器之后添加过滤器。
	AddFilterAfter(filter SecurityFilter, afterFilter SecurityFilter) HttpSecurity
	// Anonymous 启用匿名访问。
	Anonymous() HttpSecurity
	// ExceptionHandling 配置异常处理。
	ExceptionHandling(handler AccessDeniedHandler, entryPoint AuthenticationEntryPoint) HttpSecurity
	// Csrf 启用 CSRF 防护。
	Csrf() HttpSecurity
	// Logout 配置登出。
	Logout(logoutUrl string, successHandler ...LogoutSuccessHandler) HttpSecurity
	// FormLogin 配置表单登录。
	FormLogin(loginProcessingUrl string, defaultSuccessUrl ...string) HttpSecurity
	// HttpBasic 启用 HTTP Basic 认证。
	HttpBasic() HttpSecurity
	// Build 构建安全过滤器链。
	Build() (SecurityFilterChain, error)
}

HttpSecurity HTTP 安全配置接口。

提供链式 API 配置 HTTP 安全规则。 支持认证管理器、用户详情服务、过滤器、CSRF、登出等配置。

注意:此接口有 16 个方法,违反小接口原则。 未来版本将拆分为多个独立的 Configurer 接口(CsrfConfigurer、CorsConfigurer 等)。

使用示例:

httpSec := security.NewHttpSecurity()
httpSec.FormLogin("/login").
    Logout("/logout").
    Csrf().
    AuthorizeRequests(func(authz security.AuthorizeRequests) {
        authz.AntMatchers("/api/**").HasRole("ROLE_API")
        authz.AnyRequest().Authenticated()
    })
Example

ExampleHttpSecurity 使用示例:HTTP安全配置 展示链式API配置HTTP安全规则

userDetailsService := NewInMemoryUserDetailsService()
userDetailsService.CreateUser("admin", "admin123", []string{"ROLE_ADMIN"})
userDetailsService.CreateUser("user", "user123", []string{"ROLE_USER"})

passwordEncoder := NewNoOpPasswordEncoder()
authProvider := NewDaoAuthenticationProvider(userDetailsService, passwordEncoder, log.Build())
authManager := NewProviderManager(authProvider)

metadataSource := NewExpressionBasedFilterInvocationSecurityMetadataSource()
metadataSource.AddMapping("/public/**", []string{"permitAll"})
metadataSource.AddMapping("/admin/**", []string{"hasRole('ADMIN')"})
metadataSource.AddMapping("/api/**", []string{"authenticated"})

httpSecurity := NewHttpSecurity()
httpSecurity.
	AuthenticationManager(authManager).
	SecurityMetadataSource(metadataSource)

chain, err := httpSecurity.Build()
if err != nil {
	fmt.Printf("Failed to build: %v\n", err)
	return
}

fmt.Printf("Security chain built successfully: %v\n", chain != nil)

func NewHttpSecurity

func NewHttpSecurity() HttpSecurity

NewHttpSecurity 创建 HTTP 安全配置构建器。

返回:

  • HttpSecurity: 安全配置构建器实例,支持链式调用配置安全策略

type InMemoryUserDetails

type InMemoryUserDetails struct {
	// contains filtered or unexported fields
}

InMemoryUserDetails 内存用户详情实现 存储用户的完整认证和授权信息,包括: - 用户名和密码 - 权限列表(角色和权限) - 账户状态(是否启用、是否过期、是否锁定)

func NewInMemoryUserDetails

func NewInMemoryUserDetails(username, password string, authorities []string) *InMemoryUserDetails

NewInMemoryUserDetails 创建内存用户详情 默认值: enabled=true, accountNonExpired=true, credentialsNonExpired=true, accountNonLocked=true

func (*InMemoryUserDetails) AccountNonExpired

func (u *InMemoryUserDetails) AccountNonExpired() bool

AccountNonExpired 返回账户是否未过期

func (*InMemoryUserDetails) AccountNonLocked

func (u *InMemoryUserDetails) AccountNonLocked() bool

AccountNonLocked 返回账户是否未锁定

func (*InMemoryUserDetails) Authorities

func (u *InMemoryUserDetails) Authorities() []string

Authorities 返回授权列表

func (*InMemoryUserDetails) CredentialsNonExpired

func (u *InMemoryUserDetails) CredentialsNonExpired() bool

CredentialsNonExpired 返回凭证是否未过期

func (*InMemoryUserDetails) Enabled

func (u *InMemoryUserDetails) Enabled() bool

Enabled 返回是否启用

func (*InMemoryUserDetails) Password

func (u *InMemoryUserDetails) Password() string

Password 返回密码

func (*InMemoryUserDetails) Username

func (u *InMemoryUserDetails) Username() string

Username 返回用户名

type InMemoryUserDetailsService

type InMemoryUserDetailsService struct {
	// contains filtered or unexported fields
}

InMemoryUserDetailsService 内存用户详情服务 使用内存map存储用户信息,线程安全 适用场景:开发和测试环境,生产环境应使用数据库实现

func NewInMemoryUserDetailsService

func NewInMemoryUserDetailsService() *InMemoryUserDetailsService

NewInMemoryUserDetailsService 创建内存用户详情服务

func (*InMemoryUserDetailsService) CreateUser

func (s *InMemoryUserDetailsService) CreateUser(username, password string, authorities []string)

CreateUser 创建新用户

func (*InMemoryUserDetailsService) DeleteUser

func (s *InMemoryUserDetailsService) DeleteUser(username string)

DeleteUser 删除用户

func (*InMemoryUserDetailsService) LoadUserByUsername

func (s *InMemoryUserDetailsService) LoadUserByUsername(ctx context.Context, username string) (UserDetails, error)

LoadUserByUsername 根据用户名加载用户 如果用户不存在返回ErrUserNotFound

func (*InMemoryUserDetailsService) UserCount

func (s *InMemoryUserDetailsService) UserCount() int

UserCount 返回用户总数

type LeakyBucketRateLimiter

type LeakyBucketRateLimiter struct {
	// contains filtered or unexported fields
}

LeakyBucketRateLimiter 漏桶限流器

func NewLeakyBucketRateLimiter

func NewLeakyBucketRateLimiter(capacity int, rate time.Duration) *LeakyBucketRateLimiter

func (*LeakyBucketRateLimiter) Allow

func (r *LeakyBucketRateLimiter) Allow(key string) bool

Allow 检查指定 key 的请求是否允许通过(漏桶算法)。

func (*LeakyBucketRateLimiter) Cleanup

func (r *LeakyBucketRateLimiter) Cleanup()

Cleanup 清理漏桶中过期的桶数据,释放内存。

func (*LeakyBucketRateLimiter) Close added in v0.0.4

func (r *LeakyBucketRateLimiter) Close()

Close 关闭漏桶限流器,停止后台清理协程。

type LoginUrlAuthenticationEntryPoint

type LoginUrlAuthenticationEntryPoint struct {
	// contains filtered or unexported fields
}

LoginUrlAuthenticationEntryPoint 登录URL认证入口点

func NewLoginUrlAuthenticationEntryPoint

func NewLoginUrlAuthenticationEntryPoint(loginFormUrl string) *LoginUrlAuthenticationEntryPoint

func (*LoginUrlAuthenticationEntryPoint) Commence

Commence 重定向客户端到登录页面。

type LogoutFilter

type LogoutFilter struct {
	// contains filtered or unexported fields
}

LogoutFilter 登出过滤器。

处理用户登出请求,支持自定义登出 URL 和登出处理器。

func NewLogoutFilter

func NewLogoutFilter(logoutUrl string, handlers []LogoutHandler) *LogoutFilter

NewLogoutFilter 创建登出过滤器。

参数:

  • logoutUrl: 登出 URL 路径,必须以 "/" 开头
  • handlers: 登出处理器列表,可为 nil

返回:

  • *LogoutFilter: 登出过滤器实例

panic: logoutUrl 为空时触发 panic

func (*LogoutFilter) AddLogoutHandler

func (f *LogoutFilter) AddLogoutHandler(handler LogoutHandler)

func (*LogoutFilter) DoFilter

func (f *LogoutFilter) DoFilter(ctx interface{}, request interface{}, response interface{}, chain filter.FilterChain) error

DoFilter 实现 filter.Filter 接口

func (*LogoutFilter) Order added in v0.0.3

func (f *LogoutFilter) Order() int

Order 实现 filter.Filter 接口

func (*LogoutFilter) SetSuccessHandler

func (f *LogoutFilter) SetSuccessHandler(handler LogoutSuccessHandler)

type LogoutHandler

type LogoutHandler interface {
	// Logout 处理登出。
	Logout(ctx context.Context, request SecurityRequest, response SecurityResponse, authentication Authentication)
}

LogoutHandler 登出处理器接口。

type LogoutSuccessHandler

type LogoutSuccessHandler interface {
	// OnLogoutSuccess 处理登出成功。
	OnLogoutSuccess(ctx context.Context, request SecurityRequest, response SecurityResponse, authentication Authentication)
}

LogoutSuccessHandler 登出成功处理器接口。

type NoOpPasswordEncoder

type NoOpPasswordEncoder struct{}

NoOpPasswordEncoder 不进行编码的密码编码器 适用场景:仅用于开发和测试环境,明文存储密码 警告:生产环境绝对不要使用此编码器

func NewNoOpPasswordEncoder

func NewNoOpPasswordEncoder() *NoOpPasswordEncoder

NewNoOpPasswordEncoder 创建NoOp密码编码器

func (*NoOpPasswordEncoder) Encode

func (e *NoOpPasswordEncoder) Encode(rawPassword string) string

Encode 直接返回原始密码

func (*NoOpPasswordEncoder) Matches

func (e *NoOpPasswordEncoder) Matches(rawPassword, encodedPassword string) bool

Matches 直接比较原始密码和编码后密码

type PasswordEncoder

type PasswordEncoder = authentication.PasswordEncoder
Example

ExamplePasswordEncoder 使用示例:密码编码 展示不同密码编码器的使用

noop := NewNoOpPasswordEncoder()
encoded := noop.Encode("secret")
fmt.Printf("NoOp encoded: %s\n", encoded)
fmt.Printf("NoOp matches: %v\n", noop.Matches("secret", encoded))

sha256 := NewSha256PasswordEncoder()
encoded = sha256.Encode("secret")
fmt.Printf("SHA256 encoded: %s\n", encoded[:20]+"...")
fmt.Printf("SHA256 matches: %v\n", sha256.Matches("secret", encoded))

standard := NewStandardPasswordEncoder("mysecret")
encoded = standard.Encode("secret")
fmt.Printf("Standard encoded: %s\n", encoded[:20]+"...")
fmt.Printf("Standard matches: %v\n", standard.Matches("secret", encoded))

type ProviderManager

type ProviderManager struct {
	// contains filtered or unexported fields
}

ProviderManager 认证提供者管理器

func NewProviderManager

func NewProviderManager(providers ...AuthenticationProvider) *ProviderManager

NewProviderManager 创建认证提供者管理器

func (*ProviderManager) AddProvider

func (m *ProviderManager) AddProvider(provider AuthenticationProvider)

AddProvider 添加认证提供者

func (*ProviderManager) Authenticate

func (m *ProviderManager) Authenticate(ctx context.Context, token AuthenticationToken) (Authentication, error)

Authenticate 尝试通过配置的提供者进行认证

type RateLimitConfig

type RateLimitConfig struct {
	Enabled           bool
	Rate              int
	Burst             int
	ExcludePaths      []string
	Log               log.Logger
	TrustProxyHeaders bool          // 是否信任 X-Forwarded-For 等代理头
	TrustedProxies    []string      // 可信代理 IP 或 CIDR 列表,仅从这些代理获取真实客户端 IP
	BucketIdleTimeout time.Duration // 空闲桶清理超时,防止内存泄漏
	CleanupInterval   time.Duration // 过期桶清理周期
}

RateLimitConfig 限流配置

type RateLimitFilter

type RateLimitFilter struct {
	// contains filtered or unexported fields
}

RateLimitFilter 限流过滤器

func NewRateLimitFilter

func NewRateLimitFilter(config RateLimitConfig) *RateLimitFilter

func (*RateLimitFilter) Close added in v0.0.4

func (f *RateLimitFilter) Close()

Close 停止后台清理协程。

func (*RateLimitFilter) DoFilter

func (f *RateLimitFilter) DoFilter(ctx interface{}, request interface{}, response interface{}, chain filter.FilterChain) error

DoFilter 实现 filter.Filter 接口

func (*RateLimitFilter) Order added in v0.0.3

func (f *RateLimitFilter) Order() int

Order 实现 filter.Filter 接口

type RateLimitStrategy

type RateLimitStrategy interface {
	// Allow 判断是否允许请求。
	Allow(key string) bool
}

RateLimitStrategy 限流策略接口。

type RateLimiter

type RateLimiter interface {
	// Allow 判断是否允许请求。
	Allow(key string) bool
	// Cleanup 清理过期数据。
	Cleanup()
}

RateLimiter 限流器接口。

提供请求频率限制功能,防止恶意请求和暴力攻击。

type Role

type Role struct {
	// contains filtered or unexported fields
}

Role 角色实现 实现GrantedAuthority接口

func NewRole

func NewRole(authority string) *Role

NewRole 创建角色

func (*Role) Authority

func (r *Role) Authority() string

Authority 返回权限字符串

type RoleVoter

type RoleVoter struct {
	// contains filtered or unexported fields
}

RoleVoter 角色投票者

func NewRoleVoter

func NewRoleVoter() *RoleVoter

func (*RoleVoter) SetRolePrefix

func (v *RoleVoter) SetRolePrefix(prefix string)

SetRolePrefix 设置角色前缀(默认为 ROLE_)。

func (*RoleVoter) Supports added in v0.0.3

func (v *RoleVoter) Supports(attribute string) bool

Supports 是否支持该属性

func (*RoleVoter) Vote

func (v *RoleVoter) Vote(ctx context.Context, authentication authorization.Authentication, resource string, attributes []string) int

Vote 投票决定访问权限

type SecurityAutoConfiguration

type SecurityAutoConfiguration struct {
	// contains filtered or unexported fields
}

SecurityAutoConfiguration 安全模块自动配置 当 security.enabled=true 时自动装配以下组件: - UserDetailsService: 默认使用内存存储(可自定义) - PasswordEncoder: 默认使用NoOp编码器(生产环境应使用BCrypt) - AuthenticationManager: 包含DaoAuthenticationProvider和AnonymousAuthenticationProvider - SecurityFilterChain: 默认安全过滤器链(支持CORS、限流、JWT等)

自动配置流程: 1. 检查容器是否已有UserDetailsService,没有则创建默认的InMemoryUserDetailsService 2. 检查容器是否已有PasswordEncoder,没有则创建NoOpPasswordEncoder 3. 构建AuthenticationManager(包含DAO认证提供者和匿名认证提供者) 4. 构建SecurityFilterChain(包含CORS、限流、认证、授权等过滤器) 5. 将组件注册到容器中

func (*SecurityAutoConfiguration) Configure

Configure 执行自动配置

type SecurityBuilder

type SecurityBuilder struct {
	// contains filtered or unexported fields
}

SecurityBuilder 安全配置构建器

func NewSecurityBuilder

func NewSecurityBuilder() *SecurityBuilder

NewSecurityBuilder 创建安全配置构建器

func (*SecurityBuilder) AccessDecisionManager

func (b *SecurityBuilder) AccessDecisionManager(manager AccessDecisionManager) *SecurityBuilder

AccessDecisionManager 设置访问决策管理器

func (*SecurityBuilder) AddFilter

func (b *SecurityBuilder) AddFilter(filter SecurityFilter) *SecurityBuilder

AddFilter 添加过滤器

func (*SecurityBuilder) AddFilterAfter

func (b *SecurityBuilder) AddFilterAfter(filter SecurityFilter, after SecurityFilter) *SecurityBuilder

AddFilterAfter 在指定过滤器后添加

func (*SecurityBuilder) AddFilterBefore

func (b *SecurityBuilder) AddFilterBefore(filter SecurityFilter, before SecurityFilter) *SecurityBuilder

AddFilterBefore 在指定过滤器前添加

func (*SecurityBuilder) AuthenticationManager

func (b *SecurityBuilder) AuthenticationManager(manager AuthenticationManager) *SecurityBuilder

AuthenticationManager 设置认证管理器

func (*SecurityBuilder) Build

func (b *SecurityBuilder) Build() SecurityConfig

Build 构建安全配置

func (*SecurityBuilder) EnableAnonymous

func (b *SecurityBuilder) EnableAnonymous() *SecurityBuilder

EnableAnonymous 启用匿名访问

func (*SecurityBuilder) EnableCsrf

func (b *SecurityBuilder) EnableCsrf() *SecurityBuilder

EnableCsrf 启用 CSRF 保护

func (*SecurityBuilder) EnableFormLogin

func (b *SecurityBuilder) EnableFormLogin(processingUrl string, defaultSuccessUrl ...string) *SecurityBuilder

EnableFormLogin 启用表单登录

func (*SecurityBuilder) EnableHttpBasic

func (b *SecurityBuilder) EnableHttpBasic() *SecurityBuilder

EnableHttpBasic 启用 HTTP Basic 认证

func (*SecurityBuilder) EnableLogout

func (b *SecurityBuilder) EnableLogout(url string, successHandler ...LogoutSuccessHandler) *SecurityBuilder

EnableLogout 启用登出

func (*SecurityBuilder) PasswordEncoder

func (b *SecurityBuilder) PasswordEncoder(encoder PasswordEncoder) *SecurityBuilder

PasswordEncoder 设置密码编码器

func (*SecurityBuilder) UserDetailsService

func (b *SecurityBuilder) UserDetailsService(service UserDetailsService) *SecurityBuilder

UserDetailsService 设置用户详情服务

type SecurityConfig

type SecurityConfig interface {
	// Configure 配置 HTTP 安全。
	Configure(http HttpSecurity) error
}

SecurityConfig 安全配置接口。

提供自定义安全配置的入口。

type SecurityContext

type SecurityContext interface {
	// Authentication 获取当前认证信息。
	Authentication() Authentication
	// SetAuthentication 设置认证信息。
	SetAuthentication(auth Authentication)
	// ClearAuthentication 清除认证信息。
	ClearAuthentication()
}

SecurityContext 安全上下文接口。

提供对当前认证信息的访问和管理。 通常与请求生命周期绑定,用于存储和检索认证主体信息。

使用示例:

ctx := security.NewSecurityContext()
ctx.SetAuthentication(auth)
auth := ctx.Authentication()

func NewSecurityContext

func NewSecurityContext() SecurityContext

NewSecurityContext 创建新的安全上下文。

type SecurityContextHolderFilter

type SecurityContextHolderFilter struct{}

SecurityContextHolderFilter 安全上下文持有者过滤器。

在过滤器链执行完成后,将最终认证信息保存到请求属性中, 供下游 HTTP 处理器使用。

func NewSecurityContextHolderFilter

func NewSecurityContextHolderFilter() *SecurityContextHolderFilter

func (*SecurityContextHolderFilter) DoFilter

func (f *SecurityContextHolderFilter) DoFilter(ctx interface{}, request interface{}, response interface{}, chain filter.FilterChain) error

DoFilter 实现 filter.Filter 接口

func (*SecurityContextHolderFilter) Order added in v0.0.3

func (f *SecurityContextHolderFilter) Order() int

Order 实现 filter.Filter 接口

type SecurityContextLogoutHandler

type SecurityContextLogoutHandler struct{}

SecurityContextLogoutHandler 安全上下文登出处理器

func NewSecurityContextLogoutHandler

func NewSecurityContextLogoutHandler() *SecurityContextLogoutHandler

func (*SecurityContextLogoutHandler) Logout

func (h *SecurityContextLogoutHandler) Logout(ctx context.Context, request SecurityRequest, response SecurityResponse, authentication Authentication)

type SecurityFilter

type SecurityFilter = filter.Filter

filter 包的类型别名

type SecurityFilterChain

type SecurityFilterChain = filter.SecurityFilterChain

type SecurityFilterChainHandler

type SecurityFilterChainHandler struct {
	// contains filtered or unexported fields
}

SecurityFilterChainHandler 安全过滤器链处理器

func NewSecurityFilterChainHandler

func NewSecurityFilterChainHandler(securityFilterChain SecurityFilterChain, nextHandler http.Handler) *SecurityFilterChainHandler

func (*SecurityFilterChainHandler) ServeHTTP

ServeHTTP 实现http.Handler接口

func (*SecurityFilterChainHandler) SetNextHandler

func (h *SecurityFilterChainHandler) SetNextHandler(handler http.Handler)

SetNextHandler 设置下一个 HTTP 处理器(用于过滤器链接力)。

type SecurityMetadataSource

type SecurityMetadataSource interface {
	// GetAttributes 获取安全属性。
	GetAttributes(ctx context.Context, request SecurityRequest) ([]string, error)
}

SecurityMetadataSource 安全元数据源接口。

提供访问资源所需的安全属性(如角色要求)。 用于动态访问控制决策。

type SecurityRequest

type SecurityRequest interface {
	// GetMethod 获取请求方法。
	GetMethod() string
	// GetURI 获取请求 URI。
	GetURI() string
	// GetHeader 获取请求头。
	GetHeader(key string) string
	// RemoteAddress 获取直连对端的地址,格式为 "host:port"。
	RemoteAddress() string
	// SetAttribute 设置请求属性。
	SetAttribute(key string, value any)
	// GetAttribute 获取请求属性。
	GetAttribute(key string) (any, bool)
}

SecurityRequest 安全请求接口。

抽象 HTTP 请求,提供安全相关的访问方法。 用于获取请求方法、URI、头部等信息。

type SecurityResponse

type SecurityResponse interface {
	// SetStatusCode 设置状态码。
	SetStatusCode(code int)
	// SetHeader 设置响应头。
	SetHeader(key, value string)
	// Write 写入响应数据。
	Write(data []byte) error
}

SecurityResponse 安全响应接口。

抽象 HTTP 响应,提供安全相关的修改方法。 用于设置状态码、头部和响应体。

type Sha256PasswordEncoder deprecated

type Sha256PasswordEncoder struct{}

Sha256PasswordEncoder 基于 SHA256 的密码编码器

Deprecated: 此实现不使用 salt,易受彩虹表攻击。 仅适用于兼容性场景,不推荐用于生产环境。 生产环境应使用 BCryptPasswordEncoder 或 Argon2PasswordEncoder。

func NewSha256PasswordEncoder

func NewSha256PasswordEncoder() *Sha256PasswordEncoder

NewSha256PasswordEncoder 创建 SHA256 密码编码器

func (*Sha256PasswordEncoder) Encode

func (e *Sha256PasswordEncoder) Encode(rawPassword string) string

Encode 使用 SHA256 算法编码密码

func (*Sha256PasswordEncoder) Matches

func (e *Sha256PasswordEncoder) Matches(rawPassword, encodedPassword string) bool

Matches 比较编码后的密码

type SimpleLogoutSuccessHandler

type SimpleLogoutSuccessHandler struct {
	// contains filtered or unexported fields
}

SimpleLogoutSuccessHandler 简单登出成功处理器

func NewSimpleLogoutSuccessHandler

func NewSimpleLogoutSuccessHandler(targetUrl string) *SimpleLogoutSuccessHandler

func (*SimpleLogoutSuccessHandler) OnLogoutSuccess

func (h *SimpleLogoutSuccessHandler) OnLogoutSuccess(ctx context.Context, request SecurityRequest, response SecurityResponse, authentication Authentication)

type SlidingWindowRateLimiter

type SlidingWindowRateLimiter struct {
	// contains filtered or unexported fields
}

SlidingWindowRateLimiter 滑动窗口限流器

func NewSlidingWindowRateLimiter

func NewSlidingWindowRateLimiter(windowSize time.Duration, maxRequests int) *SlidingWindowRateLimiter

func (*SlidingWindowRateLimiter) Allow

func (r *SlidingWindowRateLimiter) Allow(key string) bool

Allow 检查指定 key 的请求是否允许通过(滑动窗口算法)。

func (*SlidingWindowRateLimiter) Cleanup

func (r *SlidingWindowRateLimiter) Cleanup()

Cleanup 清理滑动窗口中过期的请求记录,释放内存。

func (*SlidingWindowRateLimiter) Close added in v0.0.4

func (r *SlidingWindowRateLimiter) Close()

Close 关闭滑动窗口限流器,停止后台清理协程。

type StandardPasswordEncoder

type StandardPasswordEncoder struct {
	// contains filtered or unexported fields
}

StandardPasswordEncoder 标准密码编码器 使用密钥对密码进行SHA256哈希

func NewStandardPasswordEncoder

func NewStandardPasswordEncoder(secret string) *StandardPasswordEncoder

NewStandardPasswordEncoder 创建标准密码编码器 secret: 用于加盐的密钥

func (*StandardPasswordEncoder) Encode

func (e *StandardPasswordEncoder) Encode(rawPassword string) string

Encode 使用密钥对密码进行编码

func (*StandardPasswordEncoder) Matches

func (e *StandardPasswordEncoder) Matches(rawPassword, encodedPassword string) bool

Matches 比较编码后的密码

type StrategyRateLimiterAdapter

type StrategyRateLimiterAdapter struct {
	// contains filtered or unexported fields
}

StrategyRateLimiterAdapter 限流器适配器

func NewStrategyRateLimiterAdapter

func NewStrategyRateLimiterAdapter(limiter RateLimiter) *StrategyRateLimiterAdapter

func (*StrategyRateLimiterAdapter) Allow

func (a *StrategyRateLimiterAdapter) Allow(key string) bool

Allow 委托内部限流器检查指定 key 的请求是否允许通过。

type TokenBucket

type TokenBucket struct {
	// contains filtered or unexported fields
}

TokenBucket 令牌桶

func NewTokenBucket

func NewTokenBucket(capacity, rate int) *TokenBucket

func (*TokenBucket) IsExpired added in v0.0.4

func (b *TokenBucket) IsExpired(ttl time.Duration) bool

IsExpired 判断令牌桶是否已超过 ttl 未被访问。

func (*TokenBucket) Take

func (b *TokenBucket) Take() bool

type UnanimousBased

type UnanimousBased struct {
	// contains filtered or unexported fields
}

UnanimousBased 一致通过访问决策管理器

func NewUnanimousBased

func NewUnanimousBased(voters ...AccessDecisionVoter) *UnanimousBased

func (*UnanimousBased) AddVoter

func (m *UnanimousBased) AddVoter(voter AccessDecisionVoter)

AddVoter 添加访问决策投票者到决策管理器。

func (*UnanimousBased) Decide

func (m *UnanimousBased) Decide(ctx context.Context, authentication authorization.Authentication, resource string, attributes []string) error

Decide 决定是否授予访问权限

func (*UnanimousBased) SetAllowIfAllAbstainDecisions

func (m *UnanimousBased) SetAllowIfAllAbstainDecisions(allow bool)

SetAllowIfAllAbstainDecisions 设置当所有投票者都弃权时是否允许访问。

func (*UnanimousBased) Supports added in v0.0.3

func (m *UnanimousBased) Supports(attribute string) bool

Supports 是否支持该决策属性

type UserDetails

type UserDetails = authentication.UserDetails

type UserDetailsService

type UserDetailsService = authentication.UserDetailsService
Example

ExampleUserDetailsService 使用示例:用户详情服务 展示如何创建和管理用户

service := NewInMemoryUserDetailsService()

service.CreateUser("john", "password123", []string{"ROLE_USER"})
service.CreateUser("jane", "password456", []string{"ROLE_USER", "ROLE_ADMIN"})

ctx := context.Background()

john, _ := service.LoadUserByUsername(ctx, "john")
fmt.Printf("Username: %s\n", john.Username())
fmt.Printf("Authorities: %v\n", john.Authorities())

fmt.Printf("Total users: %d\n", service.UserCount())

service.DeleteUser("john")
fmt.Printf("Users after delete: %d\n", service.UserCount())

type UsernamePasswordAuthenticationFilter

type UsernamePasswordAuthenticationFilter struct {
	// contains filtered or unexported fields
}

UsernamePasswordAuthenticationFilter 用户名密码认证过滤器

func NewUsernamePasswordAuthenticationFilterWithDefaults

func NewUsernamePasswordAuthenticationFilterWithDefaults(
	loginProcessingURL,
	defaultSuccessURL,
	failureURL string,
	authManager AuthenticationManager,
	logger log.Logger,
) *UsernamePasswordAuthenticationFilter

func (*UsernamePasswordAuthenticationFilter) DoFilter

func (f *UsernamePasswordAuthenticationFilter) DoFilter(ctx interface{}, request interface{}, response interface{}, chain filter.FilterChain) error

DoFilter 实现 filter.Filter 接口

func (*UsernamePasswordAuthenticationFilter) Order added in v0.0.3

Order 实现 filter.Filter 接口

type UsernamePasswordAuthenticationToken

type UsernamePasswordAuthenticationToken struct {
	// contains filtered or unexported fields
}

UsernamePasswordAuthenticationToken 用户名密码认证令牌

func NewAuthenticatedUsernamePasswordAuthenticationToken

func NewAuthenticatedUsernamePasswordAuthenticationToken(principal any, authorities []string) *UsernamePasswordAuthenticationToken

NewAuthenticatedUsernamePasswordAuthenticationToken 创建已认证的用户名密码令牌

func NewUsernamePasswordAuthenticationToken

func NewUsernamePasswordAuthenticationToken(principal, credentials any) *UsernamePasswordAuthenticationToken

NewUsernamePasswordAuthenticationToken 创建未认证的用户名密码令牌

func (*UsernamePasswordAuthenticationToken) Authenticated

func (t *UsernamePasswordAuthenticationToken) Authenticated() bool

Authenticated 返回认证令牌是否已通过验证。

func (*UsernamePasswordAuthenticationToken) Authorities

func (t *UsernamePasswordAuthenticationToken) Authorities() []string

Authorities 返回认证令牌的授权列表(返回副本以保证安全)。

func (*UsernamePasswordAuthenticationToken) Credentials

func (t *UsernamePasswordAuthenticationToken) Credentials() any

Credentials 返回认证凭证(如密码)。

func (*UsernamePasswordAuthenticationToken) Name

Name 返回认证主体名称

func (*UsernamePasswordAuthenticationToken) Principal

Principal 返回认证主体的身份信息(如用户名)。

func (*UsernamePasswordAuthenticationToken) SetAuthenticated

func (t *UsernamePasswordAuthenticationToken) SetAuthenticated(authenticated bool)

SetAuthenticated 设置认证状态 SetAuthenticated 设置认证令牌的认证状态。

func (*UsernamePasswordAuthenticationToken) SetAuthorities

func (t *UsernamePasswordAuthenticationToken) SetAuthorities(authorities []string)

SetAuthorities 设置授权列表 SetAuthorities 设置认证令牌的授权列表。

type VirtualFilterChain

type VirtualFilterChain struct {
	// contains filtered or unexported fields
}

VirtualFilterChain 虚拟过滤器链

func (*VirtualFilterChain) DoFilter

func (c *VirtualFilterChain) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse) error

DoFilter 执行下一个过滤器

type WebExpressionVoter

type WebExpressionVoter struct{}

WebExpressionVoter Web表达式投票者

func NewWebExpressionVoter

func NewWebExpressionVoter() *WebExpressionVoter

func (*WebExpressionVoter) Supports added in v0.0.3

func (v *WebExpressionVoter) Supports(attribute string) bool

Supports 是否支持该属性

func (*WebExpressionVoter) Vote

func (v *WebExpressionVoter) Vote(ctx context.Context, authentication authorization.Authentication, resource string, attributes []string) int

Vote 投票决定访问权限

type WebSecurity

type WebSecurity struct{}

WebSecurity Web安全配置入口

func NewWebSecurity

func NewWebSecurity() *WebSecurity

NewWebSecurity 创建 Web 安全配置入口实例。

func (*WebSecurity) Build

func (w *WebSecurity) Build() (SecurityFilterChain, error)

Build 构建安全过滤器链(WebSecurity 的 Build 方法仅用作占位)。

func (*WebSecurity) HttpSecurity

func (w *WebSecurity) HttpSecurity() *httpSecurity

HttpSecurity 创建一个新的 HttpSecurity 构建器实例。

Directories

Path Synopsis
Package authentication 提供认证功能支持,用于 enhance 框架。
Package authentication 提供认证功能支持,用于 enhance 框架。
Package authorization 提供授权功能支持,用于 enhance 框架。
Package authorization 提供授权功能支持,用于 enhance 框架。
Package filter 提供安全过滤器链抽象,用于 enhance 框架。
Package filter 提供安全过滤器链抽象,用于 enhance 框架。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL