Documentation
¶
Overview ¶
Package security 提供安全功能支持,用于 enhance 框架。
Package security 提供安全功能支持,用于 enhance 框架。
该模块提供认证、授权、Web 安全过滤器、速率限制等安全机制,保护应用安全。 参考 Spring Security 的设计理念。
架构设计 ¶
- SecurityContext: 安全上下文接口,管理认证信息
- Authentication: 认证信息接口
- AuthenticationManager: 认证管理器接口
- AccessDecisionManager: 访问决策管理器接口
- UserDetailsService: 用户详情服务接口
- UserDetails: 用户详情接口
- PasswordEncoder: 密码编码器接口
- SecurityFilter: 安全过滤器接口
- 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/**", "ROLE_API")
authz.AnyAuthenticated()
})
认证用户:
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 ¶
- Constants
- Variables
- func ClearAuthentication()
- func ContextWithAuthentication(ctx context.Context, auth Authentication) context.Context
- func InitSecurityContext()
- func SetAuthentication(auth Authentication)
- func SetSecurityContext(ctx SecurityContext)
- type AccessDecisionManager
- type AccessDecisionVoter
- type AccessDeniedHandler
- type AffirmativeBased
- type AnonymousAuthenticationFilter
- type AnonymousAuthenticationProvider
- type AnonymousAuthenticationToken
- type AuthenticatedVoter
- type Authentication
- type AuthenticationEntryPoint
- type AuthenticationManager
- type AuthenticationProvider
- type AuthorizeRequests
- type BasicAuthenticationEntryPointWithRealm
- type BasicAuthenticationFilter
- type BasicAuthenticationFilterWithRealm
- type CasbinEnforcer
- type CasbinVoter
- type ConsensusBased
- func (m *ConsensusBased) AddVoter(voter AccessDecisionVoter)
- func (m *ConsensusBased) Decide(ctx context.Context, authentication Authentication, object any, ...) error
- func (m *ConsensusBased) SetAllowIfAllAbstainDecisions(allow bool)
- func (m *ConsensusBased) SetAllowIfEqualGrantedDenied(allow bool)
- type CookieClearingLogoutHandler
- type CookieCsrfTokenRepository
- func (r *CookieCsrfTokenRepository) ClearToken(ctx context.Context, request SecurityRequest, response SecurityResponse)
- func (r *CookieCsrfTokenRepository) GenerateToken(ctx context.Context, request SecurityRequest) (*CsrfToken, error)
- func (r *CookieCsrfTokenRepository) SaveToken(ctx context.Context, request SecurityRequest, response SecurityResponse, ...)
- func (r *CookieCsrfTokenRepository) ValidateToken(ctx context.Context, request SecurityRequest, token string) bool
- type CorsConfig
- type CorsFilter
- type CsrfAuthenticationStrategy
- type CsrfFilter
- type CsrfToken
- type CsrfTokenManager
- type CsrfTokenRepository
- type DaoAuthenticationProvider
- type DefaultLogoutSuccessHandler
- type DefaultSecurityFilterChain
- type DelegatingPasswordEncoder
- type EnhancedRateLimitFilter
- type EnhancedRateLimitOption
- type ExceptionTranslationFilter
- type ExpressionBasedFilterInvocationSecurityMetadataSource
- type ExpressionInterceptUrlRegistry
- type FilterChainProxy
- type FilterSecurityInterceptor
- func (f *FilterSecurityInterceptor) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, ...) error
- func (f *FilterSecurityInterceptor) SetAccessDecisionManager(manager AccessDecisionManager)
- func (f *FilterSecurityInterceptor) SetAuthenticationManager(manager AuthenticationManager)
- func (f *FilterSecurityInterceptor) SetSecurityMetadataSource(source SecurityMetadataSource)
- type FixedWindowCounterRateLimiter
- type GrantedAuthority
- type Http401UnauthorizedEntryPoint
- type Http403ForbiddenAccessDeniedHandler
- type Http403ForbiddenEntryPoint
- type HttpRequestAdapter
- type HttpResponseAdapter
- type HttpSecurity
- type InMemoryUserDetails
- func (u *InMemoryUserDetails) AccountNonExpired() bool
- func (u *InMemoryUserDetails) AccountNonLocked() bool
- func (u *InMemoryUserDetails) Authorities() []string
- func (u *InMemoryUserDetails) CredentialsNonExpired() bool
- func (u *InMemoryUserDetails) Enabled() bool
- func (u *InMemoryUserDetails) Password() string
- func (u *InMemoryUserDetails) Username() string
- type InMemoryUserDetailsService
- func (s *InMemoryUserDetailsService) CreateUser(username, password string, authorities []string)
- func (s *InMemoryUserDetailsService) DeleteUser(username string)
- func (s *InMemoryUserDetailsService) LoadUserByUsername(ctx context.Context, username string) (UserDetails, error)
- func (s *InMemoryUserDetailsService) UserCount() int
- type LeakyBucketRateLimiter
- type LoginUrlAuthenticationEntryPoint
- type LogoutFilter
- type LogoutHandler
- type LogoutSuccessHandler
- type NoOpPasswordEncoder
- type PasswordEncoder
- type ProviderManager
- type RateLimitConfig
- type RateLimitFilter
- type RateLimitStrategy
- type RateLimiter
- type Role
- type RoleVoter
- type SecurityAutoConfiguration
- type SecurityBuilder
- func (b *SecurityBuilder) AccessDecisionManager(manager AccessDecisionManager) *SecurityBuilder
- func (b *SecurityBuilder) AddFilter(filter SecurityFilter) *SecurityBuilder
- func (b *SecurityBuilder) AddFilterAfter(filter SecurityFilter, after SecurityFilter) *SecurityBuilder
- func (b *SecurityBuilder) AddFilterBefore(filter SecurityFilter, before SecurityFilter) *SecurityBuilder
- func (b *SecurityBuilder) AuthenticationManager(manager AuthenticationManager) *SecurityBuilder
- func (b *SecurityBuilder) Build() SecurityConfig
- func (b *SecurityBuilder) EnableAnonymous() *SecurityBuilder
- func (b *SecurityBuilder) EnableCsrf() *SecurityBuilder
- func (b *SecurityBuilder) EnableFormLogin(processingUrl string, defaultSuccessUrl ...string) *SecurityBuilder
- func (b *SecurityBuilder) EnableHttpBasic() *SecurityBuilder
- func (b *SecurityBuilder) EnableLogout(url string, successHandler ...LogoutSuccessHandler) *SecurityBuilder
- func (b *SecurityBuilder) PasswordEncoder(encoder PasswordEncoder) *SecurityBuilder
- func (b *SecurityBuilder) UserDetailsService(service UserDetailsService) *SecurityBuilder
- type SecurityConfig
- type SecurityContext
- type SecurityContextHolderFilter
- type SecurityContextLogoutHandler
- type SecurityFilter
- type SecurityFilterChain
- type SecurityFilterChainHandler
- type SecurityMetadataSource
- type SecurityRequest
- type SecurityResponse
- type Sha256PasswordEncoder
- type SimpleLogoutSuccessHandler
- type SlidingWindowRateLimiter
- type StandardPasswordEncoder
- type StrategyRateLimiterAdapter
- type TokenBucket
- type UnanimousBased
- type UserDetails
- type UserDetailsService
- type UsernamePasswordAuthenticationFilter
- type UsernamePasswordAuthenticationToken
- func (t *UsernamePasswordAuthenticationToken) Authenticated() bool
- func (t *UsernamePasswordAuthenticationToken) Authorities() []string
- func (t *UsernamePasswordAuthenticationToken) Credentials() any
- func (t *UsernamePasswordAuthenticationToken) Name() string
- func (t *UsernamePasswordAuthenticationToken) Principal() any
- func (t *UsernamePasswordAuthenticationToken) SetAuthenticated(authenticated bool)
- func (t *UsernamePasswordAuthenticationToken) SetAuthorities(authorities []string)
- type VirtualFilterChain
- type WebExpressionVoter
- type WebSecurity
Examples ¶
Constants ¶
const ( ACCESS_GRANTED = 1 // 允许访问 ACCESS_DENIED = -1 // 拒绝访问 ACCESS_ABSTAIN = 0 // 投票结果为 abstain 弃权 )
访问决策投票结果常量
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" )
const ( // Casbin 默认值 DefaultCasbinModelType = "file" DefaultCasbinModelPath = "./config/casbin_model.conf" DefaultCasbinPolicyType = "file" DefaultCasbinPolicyPath = "./config/casbin_policy.csv" DefaultCasbinAutoLoad = false DefaultCasbinAutoLoadInterval = 5 )
const (
ConditionTrue = "true"
)
const (
// Security 配置
SecurityEnabled = "security.enabled"
)
Variables ¶
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。
func SetAuthentication ¶
func SetAuthentication(auth Authentication)
SetAuthentication 设置当前认证信息到全局安全上下文。
func SetSecurityContext ¶
func SetSecurityContext(ctx SecurityContext)
SetSecurityContext 设置全局安全上下文。
Types ¶
type AccessDecisionManager ¶
type AccessDecisionManager interface {
// Decide 决定是否允许访问。
Decide(ctx context.Context, authentication Authentication, object any, attributes []string) error
}
AccessDecisionManager 访问决策管理器接口。
决定是否允许访问受保护的资源。 基于认证主体的权限和资源的访问控制属性进行决策。
type AccessDecisionVoter ¶
type AccessDecisionVoter interface {
Vote(ctx context.Context, authentication Authentication, object any, attributes []string) int
}
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
NewAffirmativeBased 创建肯定优先决策管理器
func (*AffirmativeBased) AddVoter ¶
func (m *AffirmativeBased) AddVoter(voter AccessDecisionVoter)
AddVoter 添加投票者
func (*AffirmativeBased) Decide ¶
func (m *AffirmativeBased) Decide(ctx context.Context, authentication Authentication, object any, attributes []string) error
Decide 决定是否授予访问权限 策略: 只要有一个投票者授予权限就通过,有一个拒绝就拒绝
func (*AffirmativeBased) SetAllowIfAllAbstainDecisions ¶
func (m *AffirmativeBased) SetAllowIfAllAbstainDecisions(allow bool)
SetAllowIfAllAbstainDecisions 设置是否在所有投票者都弃权时允许访问
type AnonymousAuthenticationFilter ¶
type AnonymousAuthenticationFilter struct {
// contains filtered or unexported fields
}
AnonymousAuthenticationFilter 匿名认证过滤器 职责:如果当前请求未认证,则创建匿名认证令牌 使用场景:允许未登录用户访问公开资源
func NewAnonymousAuthenticationFilter ¶
func NewAnonymousAuthenticationFilter() *AnonymousAuthenticationFilter
NewAnonymousAuthenticationFilter 创建匿名认证过滤器
func (*AnonymousAuthenticationFilter) DoFilter ¶
func (f *AnonymousAuthenticationFilter) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
DoFilter 如果当前没有认证则创建匿名认证
type AnonymousAuthenticationProvider ¶
type AnonymousAuthenticationProvider struct{}
AnonymousAuthenticationProvider 匿名认证提供者 为匿名用户创建认证令牌,当其他认证提供者都无法处理时使用 使用场景:用户未登录但需要访问某些公开资源时
func NewAnonymousAuthenticationProvider ¶
func NewAnonymousAuthenticationProvider() *AnonymousAuthenticationProvider
NewAnonymousAuthenticationProvider 创建匿名认证提供者
func (*AnonymousAuthenticationProvider) Authenticate ¶
func (p *AnonymousAuthenticationProvider) Authenticate(ctx context.Context, authentication Authentication) (Authentication, error)
Authenticate 为匿名用户创建认证令牌 只有当传入的authentication为nil或未认证时,才创建匿名令牌
func (*AnonymousAuthenticationProvider) Supports ¶
func (p *AnonymousAuthenticationProvider) Supports(authentication Authentication) bool
Supports 只支持UsernamePasswordAuthenticationToken类型
type AnonymousAuthenticationToken ¶
type AnonymousAuthenticationToken struct {
// contains filtered or unexported fields
}
AnonymousAuthenticationToken 匿名认证令牌
func NewAnonymousAuthenticationToken ¶
func NewAnonymousAuthenticationToken(key string, principal any, authorities []string) *AnonymousAuthenticationToken
NewAnonymousAuthenticationToken 创建匿名认证令牌
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 返回凭证
func (*AnonymousAuthenticationToken) Name ¶
func (t *AnonymousAuthenticationToken) Name() string
Name 返回认证主体名称
func (*AnonymousAuthenticationToken) Principal ¶
func (t *AnonymousAuthenticationToken) Principal() any
Principal 返回认证主体
type AuthenticatedVoter ¶
type AuthenticatedVoter struct{}
AuthenticatedVoter 认证投票者 检查用户是否满足特定的认证级别 支持三种认证级别:FULLY(完全认证)、REMEMBERED(记住我)、ANONYMOUSLY(匿名)
func NewAuthenticatedVoter ¶
func NewAuthenticatedVoter() *AuthenticatedVoter
func (*AuthenticatedVoter) Vote ¶
func (v *AuthenticatedVoter) Vote(ctx context.Context, authentication Authentication, object any, attributes []string) int
Vote 投票决定访问权限 支持的表达式:
- IS_AUTHENTICATED_FULLY: 要求完全认证(非匿名)
- IS_AUTHENTICATED_REMEMBERED: 允许记住我或完全认证
- IS_AUTHENTICATED_ANONYMOUSLY: 允许匿名用户访问(即所有人都可以访问)
type Authentication ¶
type Authentication interface {
// Principal 返回认证主体的标识,通常是用户名或用户对象。
Principal() any
// Credentials 返回凭证信息,如密码或令牌。
Credentials() any
// Authorities 返回授权列表,如角色和权限。
Authorities() []string
// Authenticated 是否已认证。
Authenticated() bool
// Name 返回认证主体的名称。
Name() string
}
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", authenticated.Name())
func GetAuthentication ¶
func GetAuthentication() Authentication
GetAuthentication 获取当前认证信息。
优先从请求上下文获取,如果不存在则从全局安全上下文获取。
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 interface {
// Authenticate 执行认证。
Authenticate(ctx context.Context, authentication Authentication) (Authentication, error)
}
AuthenticationManager 认证管理器接口。
负责处理认证请求,验证用户凭证并返回认证信息。 通常与 UserDetailsService 配合使用。
type AuthenticationProvider ¶
type AuthenticationProvider interface {
Authenticate(ctx context.Context, authentication Authentication) (Authentication, error)
Supports(authentication Authentication) bool
}
AuthenticationProvider 认证提供者接口。
定义认证逻辑。
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
NewBasicAuthenticationEntryPointWithRealm 创建带Realm的Basic认证入口点
func (*BasicAuthenticationEntryPointWithRealm) Commence ¶
func (e *BasicAuthenticationEntryPointWithRealm) Commence(ctx context.Context, request SecurityRequest, response SecurityResponse, err error) error
Commence 返回Basic认证失败响应
type BasicAuthenticationFilter ¶
type BasicAuthenticationFilter struct {
// contains filtered or unexported fields
}
BasicAuthenticationFilter Basic认证过滤器 职责:从Authorization头中提取Basic认证信息并进行认证 认证流程: 1. 检查Authorization头是否存在且为Basic类型 2. 解码Base64获取用户名和密码 3. 调用AuthenticationManager进行认证 4. 认证成功后将认证信息设置到全局安全上下文和request context
func NewBasicAuthenticationFilter ¶
func NewBasicAuthenticationFilter(authenticationManager AuthenticationManager) *BasicAuthenticationFilter
NewBasicAuthenticationFilter 创建Basic认证过滤器
func (*BasicAuthenticationFilter) DoFilter ¶
func (f *BasicAuthenticationFilter) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
DoFilter 处理Basic认证
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
NewBasicAuthenticationFilterWithRealm 创建带Realm的Basic认证过滤器
func (*BasicAuthenticationFilterWithRealm) DoFilter ¶
func (f *BasicAuthenticationFilterWithRealm) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
DoFilter 处理Basic认证
type CasbinEnforcer ¶
type CasbinEnforcer interface {
// Enforce 检查请求是否允许。
// 参数:subject - 主体(用户/角色),object - 资源,action - 操作
// 返回:是否允许,错误
Enforce(ctx context.Context, subject, object, action string) (bool, error)
// AddPolicy 添加策略。
// 参数:sub - 主体,obj - 资源,act - 操作
// 返回:错误
AddPolicy(ctx context.Context, sub, obj, act string) error
// RemovePolicy 移除策略。
// 参数:sub - 主体,obj - 资源,act - 操作
// 返回:错误
RemovePolicy(ctx context.Context, sub, obj, act string) error
// GetPolicy 获取所有策略。
// 返回:策略列表(二维数组),错误
GetPolicy(ctx context.Context) ([][]string, error)
// LoadPolicy 重新加载策略。
// 返回:错误
LoadPolicy(ctx context.Context) error
// SavePolicy 保存策略。
// 返回:错误
SavePolicy(ctx context.Context) error
}
CasbinEnforcer Casbin 执行器接口。
封装 Casbin 的核心功能,提供权限检查。 实现类:DefaultCasbinEnforcer(starter/casbin)、GormCasbinEnforcer(starter/casbin-gorm)、XormCasbinEnforcer(starter/casbin-xorm)
type CasbinVoter ¶
type CasbinVoter struct {
// contains filtered or unexported fields
}
CasbinVoter Casbin 投票者实现。
实现 AccessDecisionVoter 接口,将 Casbin 的权限检查集成到 enhance 的访问决策机制中。
工作流程:
- 检查用户是否已认证(未认证则弃权)
- 从 Authentication 中提取用户名作为 subject
- 从 SecurityRequest 中提取 URI 和 HTTP 方法作为 object 和 action
- 调用 CasbinEnforcer.Enforce() 进行权限检查
- 返回投票结果(ACCESS_GRANTED / ACCESS_DENIED / ACCESS_ABSTAIN)
投票策略:
- 未认证用户:ACCESS_ABSTAIN(弃权,让其他 Voter 决定)
- Casbin 允许:ACCESS_GRANTED(授予访问)
- Casbin 拒绝:ACCESS_DENIED(拒绝访问)
- 发生错误:ACCESS_ABSTAIN(弃权,让其他 Voter 决定)
注意:CasbinVoter 的投票结果会被 AffirmativeBased 决策管理器使用, 只要有一个 Voter 返回 ACCESS_GRANTED 就允许访问。
func NewCasbinVoter ¶
func NewCasbinVoter(enforcer CasbinEnforcer) *CasbinVoter
NewCasbinVoter 创建 Casbin 投票者。
func (*CasbinVoter) Supports ¶
func (v *CasbinVoter) Supports(ctx context.Context, authentication Authentication, object any, attributes []string) bool
Supports 是否支持该属性。
func (*CasbinVoter) Vote ¶
func (v *CasbinVoter) Vote(ctx context.Context, authentication Authentication, object any, attributes []string) int
Vote 投票决定是否授予访问权限。
type ConsensusBased ¶
type ConsensusBased struct {
// contains filtered or unexported fields
}
ConsensusBased 共识优先访问决策管理器 根据多数投票结果决定访问权限(民主策略) 适用场景:需要综合考虑多个权限维度
func NewConsensusBased ¶
func NewConsensusBased(voters ...AccessDecisionVoter) *ConsensusBased
NewConsensusBased 创建共识优先决策管理器
func (*ConsensusBased) AddVoter ¶
func (m *ConsensusBased) AddVoter(voter AccessDecisionVoter)
AddVoter 添加投票者
func (*ConsensusBased) Decide ¶
func (m *ConsensusBased) Decide(ctx context.Context, authentication Authentication, object any, attributes []string) error
Decide 决定是否授予访问权限 策略: 根据多数票决定,相同数量时按配置处理
func (*ConsensusBased) SetAllowIfAllAbstainDecisions ¶
func (m *ConsensusBased) SetAllowIfAllAbstainDecisions(allow bool)
SetAllowIfAllAbstainDecisions 设置是否在所有投票者都弃权时允许访问
func (*ConsensusBased) SetAllowIfEqualGrantedDenied ¶
func (m *ConsensusBased) SetAllowIfEqualGrantedDenied(allow bool)
SetAllowIfEqualGrantedDenied 设置当授权和拒绝票数相同时的处理方式
type CookieClearingLogoutHandler ¶
type CookieClearingLogoutHandler struct {
// contains filtered or unexported fields
}
CookieClearingLogoutHandler Cookie清除登出处理器 职责:登出时清除指定的Cookie(如会话Cookie、CSRF Token等)
func NewCookieClearingLogoutHandler ¶
func NewCookieClearingLogoutHandler(cookieNames ...string) *CookieClearingLogoutHandler
NewCookieClearingLogoutHandler 创建 Cookie 清除登出处理器。
func (*CookieClearingLogoutHandler) Logout ¶
func (h *CookieClearingLogoutHandler) Logout(ctx context.Context, request SecurityRequest, response SecurityResponse, authentication Authentication)
Logout 清除指定 Cookie。
type CookieCsrfTokenRepository ¶
type CookieCsrfTokenRepository struct {
// contains filtered or unexported fields
}
CookieCsrfTokenRepository 基于Cookie的CSRF令牌仓库 职责:生成、保存和验证CSRF Token 存储策略:将Token保存到Cookie中,客户端需在请求头中携带Token
func NewCookieCsrfTokenRepository ¶
func NewCookieCsrfTokenRepository() *CookieCsrfTokenRepository
NewCookieCsrfTokenRepository 创建基于 Cookie 的 CSRF 令牌仓库。
func (*CookieCsrfTokenRepository) ClearToken ¶
func (r *CookieCsrfTokenRepository) ClearToken(ctx context.Context, request SecurityRequest, response SecurityResponse)
ClearToken 清除 CSRF 令牌。
func (*CookieCsrfTokenRepository) GenerateToken ¶
func (r *CookieCsrfTokenRepository) GenerateToken(ctx context.Context, request SecurityRequest) (*CsrfToken, error)
GenerateToken 生成新的 CSRF 令牌。
func (*CookieCsrfTokenRepository) SaveToken ¶
func (r *CookieCsrfTokenRepository) SaveToken(ctx context.Context, request SecurityRequest, response SecurityResponse, token *CsrfToken)
SaveToken 保存 CSRF 令牌到 Cookie。
func (*CookieCsrfTokenRepository) ValidateToken ¶
func (r *CookieCsrfTokenRepository) ValidateToken(ctx context.Context, request SecurityRequest, token string) bool
ValidateToken 验证 CSRF 令牌。
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 (*CorsFilter) DoFilter ¶
func (f *CorsFilter) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
DoFilter 处理CORS请求
type CsrfAuthenticationStrategy ¶
type CsrfAuthenticationStrategy struct {
// contains filtered or unexported fields
}
CsrfAuthenticationStrategy CSRF 令牌会话认证策略。
func NewCsrfAuthenticationStrategy ¶
func NewCsrfAuthenticationStrategy() *CsrfAuthenticationStrategy
NewCsrfAuthenticationStrategy 创建 CSRF 认证策略。
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防护过滤器 职责:防止跨站请求伪造攻击 执行流程: 1. GET/HEAD/OPTIONS/TRACE请求:生成并保存CSRF Token到Cookie 2. POST/PUT/DELETE等请求:验证请求头中的CSRF Token 3. Token验证失败则拒绝请求
func NewCsrfFilter ¶
func NewCsrfFilter(tokenRepository CsrfTokenRepository) *CsrfFilter
NewCsrfFilter 创建 CSRF 过滤器。
func (*CsrfFilter) AddExcludePath ¶
func (f *CsrfFilter) AddExcludePath(paths ...string) error
AddExcludePath 添加排除路径。
func (*CsrfFilter) DoFilter ¶
func (f *CsrfFilter) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
DoFilter 执行 CSRF 检查。
type CsrfTokenManager ¶
type CsrfTokenManager struct {
// contains filtered or unexported fields
}
CsrfTokenManager CSRF 令牌管理器。
func NewCsrfTokenManager ¶
func NewCsrfTokenManager() *CsrfTokenManager
NewCsrfTokenManager 创建 CSRF 令牌管理器。
func (*CsrfTokenManager) GenerateToken ¶
func (m *CsrfTokenManager) GenerateToken(principal string) string
GenerateToken 为用户生成 CSRF 令牌。
func (*CsrfTokenManager) RemoveToken ¶
func (m *CsrfTokenManager) RemoveToken(principal string)
RemoveToken 移除用户的 CSRF 令牌。
func (*CsrfTokenManager) ValidateToken ¶
func (m *CsrfTokenManager) ValidateToken(principal, token string) bool
ValidateToken 验证 CSRF 令牌。
type CsrfTokenRepository ¶
type CsrfTokenRepository interface {
// GenerateToken 生成新的 CSRF 令牌。
GenerateToken(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的认证提供者 从UserDetailsService加载用户并验证密码 认证流程: 1. 从认证令牌中提取用户名 2. 通过UserDetailsService加载用户详情 3. 验证密码是否匹配 4. 检查用户状态(是否启用、是否锁定等) 5. 认证成功后返回包含用户详情的认证令牌
func NewDaoAuthenticationProvider ¶
func NewDaoAuthenticationProvider(userDetailsService UserDetailsService, passwordEncoder PasswordEncoder, logger log.Logger) *DaoAuthenticationProvider
NewDaoAuthenticationProvider 创建DAO认证提供者
func (*DaoAuthenticationProvider) Authenticate ¶
func (p *DaoAuthenticationProvider) Authenticate(ctx context.Context, authentication Authentication) (Authentication, error)
Authenticate 执行认证逻辑 1. 根据用户名加载用户信息 2. 验证密码 3. 检查用户状态
func (*DaoAuthenticationProvider) Supports ¶
func (p *DaoAuthenticationProvider) Supports(authentication Authentication) bool
Supports 判断是否支持该认证方式
type DefaultLogoutSuccessHandler ¶
type DefaultLogoutSuccessHandler struct {
// contains filtered or unexported fields
}
DefaultLogoutSuccessHandler 默认登出成功处理器 职责:登出成功后重定向到指定URL(默认/login?logout)
func NewDefaultLogoutSuccessHandler ¶
func NewDefaultLogoutSuccessHandler(defaultTargetUrl string) *DefaultLogoutSuccessHandler
NewDefaultLogoutSuccessHandler 创建默认登出成功处理器。
func (*DefaultLogoutSuccessHandler) OnLogoutSuccess ¶
func (h *DefaultLogoutSuccessHandler) OnLogoutSuccess(ctx context.Context, request SecurityRequest, response SecurityResponse, authentication Authentication)
OnLogoutSuccess 处理登出成功。
type DefaultSecurityFilterChain ¶
type DefaultSecurityFilterChain struct{}
DefaultSecurityFilterChain 默认安全过滤器链 当所有过滤器都执行完毕后调用
func (*DefaultSecurityFilterChain) DoFilter ¶
func (c *DefaultSecurityFilterChain) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse) error
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 增强版限流过滤器 职责:基于策略模式的限流过滤器,支持自定义限流策略和回调 与RateLimitFilter的区别:使用RateLimitStrategy接口,更灵活
func NewEnhancedRateLimitFilter ¶
func NewEnhancedRateLimitFilter(strategy RateLimitStrategy, opts ...EnhancedRateLimitOption) *EnhancedRateLimitFilter
NewEnhancedRateLimitFilter 创建增强版限流过滤器。
func (*EnhancedRateLimitFilter) DoFilter ¶
func (f *EnhancedRateLimitFilter) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
DoFilter 处理限流。
type EnhancedRateLimitOption ¶
type EnhancedRateLimitOption func(*EnhancedRateLimitFilter)
EnhancedRateLimitOption 增强限流配置选项。
func WithExcludePaths ¶
func WithExcludePaths(paths ...string) EnhancedRateLimitOption
WithExcludePaths 设置排除路径。
func WithOnRateLimit ¶
func WithOnRateLimit(fn func(ctx context.Context, request SecurityRequest, response SecurityResponse)) EnhancedRateLimitOption
WithOnRateLimit 设置限流回调。
type ExceptionTranslationFilter ¶
type ExceptionTranslationFilter struct {
// contains filtered or unexported fields
}
ExceptionTranslationFilter 异常转换过滤器 职责:捕获安全异常并转换为适当的HTTP响应 处理逻辑: - 未认证用户访问受保护资源:返回401或重定向到登录页 - 已认证用户访问无权限资源:返回403 Forbidden
func NewExceptionTranslationFilter ¶
func NewExceptionTranslationFilter(accessDeniedHandler AccessDeniedHandler, authenticationEntryPoint AuthenticationEntryPoint) *ExceptionTranslationFilter
NewExceptionTranslationFilter 创建异常转换过滤器
func (*ExceptionTranslationFilter) DoFilter ¶
func (f *ExceptionTranslationFilter) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
DoFilter 捕获安全异常并转换为HTTP响应
type ExpressionBasedFilterInvocationSecurityMetadataSource ¶
type ExpressionBasedFilterInvocationSecurityMetadataSource struct {
// contains filtered or unexported fields
}
ExpressionBasedFilterInvocationSecurityMetadataSource 基于表达式的过滤器调用安全元数据源 职责:根据请求URL和HTTP方法,返回对应的安全属性(权限表达式) 支持Ant风格路径模式:/**, /path/*, /path/** 示例:"/admin/**" -> ["hasRole('ADMIN')"]
func NewExpressionBasedFilterInvocationSecurityMetadataSource ¶
func NewExpressionBasedFilterInvocationSecurityMetadataSource() *ExpressionBasedFilterInvocationSecurityMetadataSource
NewExpressionBasedFilterInvocationSecurityMetadataSource 创建元数据源
func (*ExpressionBasedFilterInvocationSecurityMetadataSource) AddMapping ¶
func (s *ExpressionBasedFilterInvocationSecurityMetadataSource) AddMapping(pattern string, attributes []string)
AddMapping 添加URL路径和安全属性映射 格式: "GET::/path" 或 "/path" (默认匹配所有HTTP方法) 示例: AddMapping("/admin/**", []string{"hasRole('ADMIN')"})
func (*ExpressionBasedFilterInvocationSecurityMetadataSource) GetAttributes ¶
func (s *ExpressionBasedFilterInvocationSecurityMetadataSource) GetAttributes(ctx context.Context, request SecurityRequest) ([]string, error)
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 创建过滤器链代理
func (*FilterChainProxy) DoFilter ¶
func (p *FilterChainProxy) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse) error
DoFilter 执行过滤器链
type FilterSecurityInterceptor ¶
type FilterSecurityInterceptor struct {
// contains filtered or unexported fields
}
FilterSecurityInterceptor 过滤器安全拦截器 职责:执行访问决策检查,决定是否允许请求继续 执行流程: 1. 从SecurityMetadataSource获取URL对应的安全属性(权限表达式) 2. 如果已处理过该请求(observeOncePerRequest),直接放行 3. 调用AccessDecisionManager进行权限决策 4. 决策通过则继续执行后续过滤器,否则抛出异常
func NewFilterSecurityInterceptor ¶
func NewFilterSecurityInterceptor(securityMetadataSource SecurityMetadataSource, accessDecisionManager AccessDecisionManager, authenticationManager AuthenticationManager) *FilterSecurityInterceptor
NewFilterSecurityInterceptor 创建过滤器安全拦截器
func (*FilterSecurityInterceptor) DoFilter ¶
func (f *FilterSecurityInterceptor) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
DoFilter 执行访问决策
func (*FilterSecurityInterceptor) SetAccessDecisionManager ¶
func (f *FilterSecurityInterceptor) SetAccessDecisionManager(manager AccessDecisionManager)
func (*FilterSecurityInterceptor) SetAuthenticationManager ¶
func (f *FilterSecurityInterceptor) SetAuthenticationManager(manager AuthenticationManager)
func (*FilterSecurityInterceptor) SetSecurityMetadataSource ¶
func (f *FilterSecurityInterceptor) SetSecurityMetadataSource(source SecurityMetadataSource)
type FixedWindowCounterRateLimiter ¶
type FixedWindowCounterRateLimiter struct {
// contains filtered or unexported fields
}
FixedWindowCounterRateLimiter 固定窗口计数器限流器 算法原理:将时间划分为固定窗口,每个窗口内计数请求数量 优点:实现简单,内存占用小 缺点:存在窗口临界问题(窗口切换时可能允许2倍流量) 适用场景:对限流精度要求不高的场景
func NewFixedWindowCounterRateLimiter ¶
func NewFixedWindowCounterRateLimiter(windowSize time.Duration, maxRequests int) *FixedWindowCounterRateLimiter
NewFixedWindowCounterRateLimiter 创建固定窗口计数器限流器。
func (*FixedWindowCounterRateLimiter) Allow ¶
func (r *FixedWindowCounterRateLimiter) Allow(key string) bool
Allow 判断是否允许请求。
func (*FixedWindowCounterRateLimiter) Cleanup ¶
func (r *FixedWindowCounterRateLimiter) Cleanup()
Cleanup 清理过期计数器。
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
NewHttp401UnauthorizedEntryPoint 创建401入口点
func (*Http401UnauthorizedEntryPoint) Commence ¶
func (e *Http401UnauthorizedEntryPoint) Commence(ctx context.Context, request SecurityRequest, response SecurityResponse, err error) error
Commence 返回401状态码
type Http403ForbiddenAccessDeniedHandler ¶
type Http403ForbiddenAccessDeniedHandler struct{}
Http403ForbiddenAccessDeniedHandler 403禁止访问拒绝处理器
func NewHttp403ForbiddenAccessDeniedHandler ¶
func NewHttp403ForbiddenAccessDeniedHandler() *Http403ForbiddenAccessDeniedHandler
NewHttp403ForbiddenAccessDeniedHandler 创建403拒绝处理器
func (*Http403ForbiddenAccessDeniedHandler) Handle ¶
func (e *Http403ForbiddenAccessDeniedHandler) Handle(ctx context.Context, request SecurityRequest, response SecurityResponse, err error) error
Handle 处理访问拒绝
type Http403ForbiddenEntryPoint ¶
type Http403ForbiddenEntryPoint struct{}
Http403ForbiddenEntryPoint 403禁止访问入口点
func NewHttp403ForbiddenEntryPoint ¶
func NewHttp403ForbiddenEntryPoint() *Http403ForbiddenEntryPoint
NewHttp403ForbiddenEntryPoint 创建403入口点
func (*Http403ForbiddenEntryPoint) Commence ¶
func (e *Http403ForbiddenEntryPoint) Commence(ctx context.Context, request SecurityRequest, response SecurityResponse, err error) error
Commence 返回403状态码
type HttpRequestAdapter ¶
type HttpRequestAdapter struct {
// contains filtered or unexported fields
}
HttpRequestAdapter HTTP请求适配器 职责:将标准库的http.Request适配为SecurityRequest接口 使安全模块能够透明地访问HTTP请求信息
func NewHttpRequestAdapter ¶
func NewHttpRequestAdapter(request *http.Request) *HttpRequestAdapter
NewHttpRequestAdapter 创建HTTP请求适配器
func (*HttpRequestAdapter) GetAttribute ¶
func (a *HttpRequestAdapter) GetAttribute(key string) (any, bool)
GetAttribute 获取请求属性
func (*HttpRequestAdapter) GetHeader ¶
func (a *HttpRequestAdapter) GetHeader(key string) string
GetHeader 返回请求头
func (*HttpRequestAdapter) GetMethod ¶
func (a *HttpRequestAdapter) GetMethod() string
GetMethod 返回HTTP方法
func (*HttpRequestAdapter) SetAttribute ¶
func (a *HttpRequestAdapter) SetAttribute(key string, value any)
SetAttribute 设置请求属性
type HttpResponseAdapter ¶
type HttpResponseAdapter struct {
// contains filtered or unexported fields
}
HttpResponseAdapter HTTP响应适配器 职责:将标准库的http.ResponseWriter适配为SecurityResponse接口 使安全模块能够透明地写入HTTP响应
func NewHttpResponseAdapter ¶
func NewHttpResponseAdapter(responseWriter http.ResponseWriter) *HttpResponseAdapter
NewHttpResponseAdapter 创建HTTP响应适配器
func (*HttpResponseAdapter) SetHeader ¶
func (a *HttpResponseAdapter) SetHeader(key, value string)
SetHeader 设置响应头
func (*HttpResponseAdapter) SetStatusCode ¶
func (a *HttpResponseAdapter) SetStatusCode(code int)
SetStatusCode 设置响应状态码
func (*HttpResponseAdapter) StatusCode ¶
func (a *HttpResponseAdapter) StatusCode() int
StatusCode 返回当前响应状态码
func (*HttpResponseAdapter) Write ¶
func (a *HttpResponseAdapter) Write(data []byte) error
Write 写入响应体
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(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、登出等配置。
使用示例:
httpSec := security.NewHttpSecurity()
httpSec.FormLogin("/login").
Logout("/logout").
Csrf().
AuthorizeRequests(func(authz security.AuthorizeRequests) {
authz.AntMatchers("/api/**", "ROLE_API")
authz.AnyAuthenticated()
})
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)
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) 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
NewLeakyBucketRateLimiter 创建漏桶限流器。
func (*LeakyBucketRateLimiter) Allow ¶
func (r *LeakyBucketRateLimiter) Allow(key string) bool
Allow 判断是否允许请求。
type LoginUrlAuthenticationEntryPoint ¶
type LoginUrlAuthenticationEntryPoint struct {
// contains filtered or unexported fields
}
LoginUrlAuthenticationEntryPoint 登录URL认证入口点 未认证用户访问受保护资源时重定向到登录页
func NewLoginUrlAuthenticationEntryPoint ¶
func NewLoginUrlAuthenticationEntryPoint(loginFormUrl string) *LoginUrlAuthenticationEntryPoint
NewLoginUrlAuthenticationEntryPoint 创建登录入口点
func (*LoginUrlAuthenticationEntryPoint) Commence ¶
func (e *LoginUrlAuthenticationEntryPoint) Commence(ctx context.Context, request SecurityRequest, response SecurityResponse, err error) error
Commence 重定向到登录页
type LogoutFilter ¶
type LogoutFilter struct {
// contains filtered or unexported fields
}
LogoutFilter 登出过滤器 职责:处理登出请求,清除认证信息并执行登出处理器 执行流程: 1. 检查请求方法和URL是否匹配登出配置 2. 执行所有LogoutHandler(清除安全上下文、清除Cookie等) 3. 清除全局认证信息 4. 调用登出成功处理器(重定向或返回JSON)
func NewLogoutFilter ¶
func NewLogoutFilter(logoutUrl string, handlers []LogoutHandler) *LogoutFilter
NewLogoutFilter 创建登出过滤器。
func (*LogoutFilter) AddLogoutHandler ¶
func (f *LogoutFilter) AddLogoutHandler(handler LogoutHandler)
AddLogoutHandler 添加登出处理器。
func (*LogoutFilter) DoFilter ¶
func (f *LogoutFilter) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
DoFilter 处理登出请求。
func (*LogoutFilter) SetSuccessHandler ¶
func (f *LogoutFilter) SetSuccessHandler(handler LogoutSuccessHandler)
SetSuccessHandler 设置登出成功处理器。
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 interface {
// Encode 编码密码。
Encode(rawPassword string) string
// Matches 验证密码是否匹配。
Matches(rawPassword, encodedPassword string) bool
}
PasswordEncoder 密码编码器接口。
用于密码的编码和验证。 推荐使用 bcrypt、argon2 等安全算法,避免使用 MD5、SHA1 等不安全算法。
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, authentication Authentication) (Authentication, error)
Authenticate 尝试通过配置的提供者进行认证 遍历所有提供者,返回第一个成功认证的结果
type RateLimitConfig ¶
type RateLimitConfig struct {
Enabled bool
Rate int
Burst int
ExcludePaths []string
Log log.Logger
}
RateLimitConfig 限流配置
type RateLimitFilter ¶
type RateLimitFilter struct {
// contains filtered or unexported fields
}
RateLimitFilter 限流过滤器
func NewRateLimitFilter ¶
func NewRateLimitFilter(config RateLimitConfig) *RateLimitFilter
NewRateLimitFilter 创建限流过滤器
func (*RateLimitFilter) DoFilter ¶
func (f *RateLimitFilter) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
DoFilter 处理限流
type RateLimitStrategy ¶
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接口
type RoleVoter ¶
type RoleVoter struct {
// contains filtered or unexported fields
}
RoleVoter 角色投票者 只处理具有指定前缀(默认ROLE_)的角色 用于基于角色的访问控制(RBAC)
func (*RoleVoter) SetRolePrefix ¶
SetRolePrefix 设置角色前缀
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 ¶
func (c *SecurityAutoConfiguration) Configure(ctx boot.ApplicationContext) error
Configure 执行自动配置
type SecurityBuilder ¶
type SecurityBuilder struct {
// contains filtered or unexported fields
}
SecurityBuilder 安全配置构建器
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) 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()
type SecurityContextHolderFilter ¶
type SecurityContextHolderFilter struct {
// contains filtered or unexported fields
}
SecurityContextHolderFilter 安全上下文持有者过滤器 职责: 1. 请求开始前:保存当前全局认证信息并清除,防止请求间污染 2. 请求执行中:允许其他过滤器设置认证信息到全局上下文 3. 请求结束后:恢复之前的认证信息并清理当前请求的认证 注意:当前请求的认证信息会保存到请求属性中,供SecurityFilterChainHandler传递给业务handler
func NewSecurityContextHolderFilter ¶
func NewSecurityContextHolderFilter(securityContext SecurityContext) *SecurityContextHolderFilter
NewSecurityContextHolderFilter 创建安全上下文持有者过滤器
func (*SecurityContextHolderFilter) DoFilter ¶
func (f *SecurityContextHolderFilter) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
DoFilter 执行过滤器链 在请求前保存全局认证信息并清除,请求结束后恢复之前的认证信息 当前请求的认证信息保存到请求属性中,供 SecurityFilterChainHandler 传递给 handler
type SecurityContextLogoutHandler ¶
type SecurityContextLogoutHandler struct{}
SecurityContextLogoutHandler 安全上下文登出处理器 职责:登出时清除全局认证信息
func NewSecurityContextLogoutHandler ¶
func NewSecurityContextLogoutHandler() *SecurityContextLogoutHandler
NewSecurityContextLogoutHandler 创建安全上下文登出处理器。
func (*SecurityContextLogoutHandler) Logout ¶
func (h *SecurityContextLogoutHandler) Logout(ctx context.Context, request SecurityRequest, response SecurityResponse, authentication Authentication)
Logout 清除安全上下文。
type SecurityFilter ¶
type SecurityFilter interface {
// DoFilter 执行过滤器。
DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
}
SecurityFilter 安全过滤器接口。
处理安全相关的请求过滤,如认证、授权、CSRF 防护等。 过滤器按顺序执行,形成安全过滤器链。
type SecurityFilterChain ¶
type SecurityFilterChain interface {
// DoFilter 执行过滤器链。
DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse) error
}
SecurityFilterChain 安全过滤器链接口。
按顺序执行多个安全过滤器。 每个过滤器可以决定是否继续执行下一个过滤器。
type SecurityFilterChainHandler ¶
type SecurityFilterChainHandler struct {
// contains filtered or unexported fields
}
SecurityFilterChainHandler 安全过滤器链处理器 职责:将SecurityFilterChain适配为标准库的http.Handler 执行流程: 1. 接收HTTP请求,适配为SecurityRequest和SecurityResponse 2. 执行安全过滤器链(认证、授权等) 3. 如果过滤器链执行成功且状态码正常,将认证信息注入request context 4. 调用下一个handler(业务处理器)
func NewSecurityFilterChainHandler ¶
func NewSecurityFilterChainHandler(securityFilterChain SecurityFilterChain, nextHandler http.Handler) *SecurityFilterChainHandler
NewSecurityFilterChainHandler 创建安全过滤器链处理器
func (*SecurityFilterChainHandler) ServeHTTP ¶
func (h *SecurityFilterChainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP 实现http.Handler接口
func (*SecurityFilterChainHandler) SetNextHandler ¶
func (h *SecurityFilterChainHandler) SetNextHandler(handler http.Handler)
SetNextHandler 设置下一个处理器
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
// 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 ¶
type Sha256PasswordEncoder struct{}
Sha256PasswordEncoder 基于 SHA256 的密码编码器
注意: 此实现仅适用于兼容性场景,不推荐用于生产环境。 生产环境应使用 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
NewSimpleLogoutSuccessHandler 创建简单登出成功处理器。
func (*SimpleLogoutSuccessHandler) OnLogoutSuccess ¶
func (h *SimpleLogoutSuccessHandler) OnLogoutSuccess(ctx context.Context, request SecurityRequest, response SecurityResponse, authentication Authentication)
OnLogoutSuccess 处理登出成功,重定向到指定 URL。
type SlidingWindowRateLimiter ¶
type SlidingWindowRateLimiter struct {
// contains filtered or unexported fields
}
SlidingWindowRateLimiter 滑动窗口限流器 算法原理:记录每个请求的时间戳,只统计窗口时间范围内的请求数量 优点:避免固定窗口的临界问题,限流更平滑 适用场景:需要精确控制请求频率的场景
func NewSlidingWindowRateLimiter ¶
func NewSlidingWindowRateLimiter(windowSize time.Duration, maxRequests int) *SlidingWindowRateLimiter
NewSlidingWindowRateLimiter 创建滑动窗口限流器。
func (*SlidingWindowRateLimiter) Allow ¶
func (r *SlidingWindowRateLimiter) Allow(key string) bool
Allow 判断是否允许请求。
func (*SlidingWindowRateLimiter) Cleanup ¶
func (r *SlidingWindowRateLimiter) Cleanup()
Cleanup 清理过期窗口。
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
NewStrategyRateLimiterAdapter 创建适配器。
func (*StrategyRateLimiterAdapter) Allow ¶
func (a *StrategyRateLimiterAdapter) Allow(key string) bool
Allow 判断是否允许请求。
type TokenBucket ¶
type TokenBucket struct {
// contains filtered or unexported fields
}
TokenBucket 令牌桶
type UnanimousBased ¶
type UnanimousBased struct {
// contains filtered or unexported fields
}
UnanimousBased 一致通过访问决策管理器 只有所有投票者都不拒绝才允许访问(最严格策略) 适用场景:需要满足所有权限要求才能访问
func NewUnanimousBased ¶
func NewUnanimousBased(voters ...AccessDecisionVoter) *UnanimousBased
NewUnanimousBased 创建一致通过决策管理器
func (*UnanimousBased) AddVoter ¶
func (m *UnanimousBased) AddVoter(voter AccessDecisionVoter)
AddVoter 添加投票者
func (*UnanimousBased) Decide ¶
func (m *UnanimousBased) Decide(ctx context.Context, authentication Authentication, object any, attributes []string) error
Decide 决定是否授予访问权限 策略: 所有投票者都不拒绝,且至少有一个授予权限时通过
func (*UnanimousBased) SetAllowIfAllAbstainDecisions ¶
func (m *UnanimousBased) SetAllowIfAllAbstainDecisions(allow bool)
SetAllowIfAllAbstainDecisions 设置是否在所有投票者都弃权时允许访问
type UserDetails ¶
type UserDetails interface {
// Username 返回用户名。
Username() string
// Password 返回密码。
Password() string
// Authorities 返回权限列表。
Authorities() []string
// Enabled 账户是否启用。
Enabled() bool
// AccountNonExpired 账户是否未过期。
AccountNonExpired() bool
// CredentialsNonExpired 凭证是否未过期。
CredentialsNonExpired() bool
// AccountNonLocked 账户是否未锁定。
AccountNonLocked() bool
}
UserDetails 用户详情接口。
包含用户的完整认证和授权信息。 实现应提供用户名、密码、权限列表和账户状态。
type UserDetailsService ¶
type UserDetailsService interface {
// LoadUserByUsername 根据用户名加载用户详情。
LoadUserByUsername(ctx context.Context, username string) (UserDetails, error)
}
UserDetailsService 用户详情服务接口。
根据用户名加载用户信息,用于认证和授权。 实现可以从数据库、LDAP、内存等来源加载用户。
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
NewUsernamePasswordAuthenticationFilterWithDefaults 创建带默认值的用户名密码认证过滤器
func (*UsernamePasswordAuthenticationFilter) DoFilter ¶
func (f *UsernamePasswordAuthenticationFilter) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse, chain SecurityFilterChain) error
DoFilter 处理用户名密码认证
type UsernamePasswordAuthenticationToken ¶
type UsernamePasswordAuthenticationToken struct {
// contains filtered or unexported fields
}
UsernamePasswordAuthenticationToken 用户名密码认证令牌 用于在认证过程中传递和存储用户凭证 认证前:包含用户名和密码(authenticated=false) 认证后:包含用户详情和权限列表(authenticated=true)
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
func (*UsernamePasswordAuthenticationToken) Authorities ¶
func (t *UsernamePasswordAuthenticationToken) Authorities() []string
func (*UsernamePasswordAuthenticationToken) Credentials ¶
func (t *UsernamePasswordAuthenticationToken) Credentials() any
func (*UsernamePasswordAuthenticationToken) Name ¶
func (t *UsernamePasswordAuthenticationToken) Name() string
Name 返回认证主体名称 支持字符串和UserDetails两种principal类型
func (*UsernamePasswordAuthenticationToken) Principal ¶
func (t *UsernamePasswordAuthenticationToken) Principal() any
func (*UsernamePasswordAuthenticationToken) SetAuthenticated ¶
func (t *UsernamePasswordAuthenticationToken) SetAuthenticated(authenticated bool)
SetAuthenticated 设置认证状态
func (*UsernamePasswordAuthenticationToken) SetAuthorities ¶
func (t *UsernamePasswordAuthenticationToken) SetAuthorities(authorities []string)
SetAuthorities 设置授权列表
type VirtualFilterChain ¶
type VirtualFilterChain struct {
// contains filtered or unexported fields
}
VirtualFilterChain 虚拟过滤器链 在过滤器执行过程中跟踪当前索引,实现链式调用 每个过滤器执行完毕后,通过VirtualFilterChain触发下一个过滤器
func (*VirtualFilterChain) DoFilter ¶
func (c *VirtualFilterChain) DoFilter(ctx context.Context, request SecurityRequest, response SecurityResponse) error
DoFilter 执行下一个过滤器
type WebExpressionVoter ¶
type WebExpressionVoter struct{}
WebExpressionVoter Web表达式投票者 支持Spring Security风格的Web表达式语言 用于解析和执行权限表达式(如hasRole、hasAuthority等)
func NewWebExpressionVoter ¶
func NewWebExpressionVoter() *WebExpressionVoter
func (*WebExpressionVoter) Vote ¶
func (v *WebExpressionVoter) Vote(ctx context.Context, authentication Authentication, object any, attributes []string) int
Vote 投票决定访问权限 支持的表达式:
- permitAll: 允许所有人访问
- denyAll: 拒绝所有人访问
- authenticated: 仅允许已认证用户
- hasRole('ROLE'): 检查是否具有指定角色
- hasAnyRole('ROLE1','ROLE2'): 检查是否具有任一指定角色
- hasAuthority('AUTHORITY'): 检查是否具有指定权限
- hasAnyAuthority('AUTH1','AUTH2'): 检查是否具有任一指定权限
type WebSecurity ¶
type WebSecurity struct{}
WebSecurity Web安全配置入口 提供创建HTTP安全配置的工厂方法
func (*WebSecurity) Build ¶
func (w *WebSecurity) Build() (SecurityFilterChain, error)
Build 构建安全过滤器链(已废弃,请使用HttpSecurity().Build())
func (*WebSecurity) HttpSecurity ¶
func (w *WebSecurity) HttpSecurity() *httpSecurity
HttpSecurity 创建HTTP安全配置