Skip to content

Conversation

@CodeCasterX
Copy link
Member

@CodeCasterX CodeCasterX commented Oct 2, 2025

🔗 相关问题 / Related Issue #328

Issue 链接 / Issue Link: 内部需求,修复 HTTP 客户端认证功能的多个 Bug 并完善功能

  • 这是一个微小的修改(如错别字),不需要 Issue / This is a trivial change (like typo fix) that doesn't need an issue

📋 变更类型 / Type of Change

  • 🐛 Bug 修复 / Bug fix (non-breaking change which fixes an issue)
  • ✨ 新功能 / New feature (non-breaking change which adds functionality)
  • 📚 文档更新 / Documentation update
  • 🔧 重构 / Refactoring (no functional changes)
  • 🚀 功能增强 / Feature enhancement (improve existing functionality without breaking changes)

📝 变更目的 / Purpose of the Change

本 PR 为 FIT HTTP 客户端添加了完整的认证功能支持,修复了多个 Bug,并通过架构重构提升了代码质量和可维护性。

主要目标:

  1. 修复参数级别认证与方法参数不匹配的 Bug
  2. 支持 AuthProvider 动态认证(之前抛出 UnsupportedOperationException)
  3. 修复 API_KEY 字段映射错误(错误地映射到 annotation.name() 而非 "value")
  4. 支持 BASIC 认证的参数级别字段选择(username/password)
  5. 简化架构,与 FEL Tool 系统保持一致
  6. 添加完整的使用文档和原理文档

📋 主要变更 / Brief Changelog

🐛 Bug 修复

  1. 修复参数级别认证匹配错误 (commit: 0b3b975)

    • 问题:参数级别的 @requestauth 应用器与方法参数索引不匹配
    • 修复:在 parseMethod 中正确创建 paramAppliers 列表
  2. 修复 API_KEY 字段映射 Bug (commit: 992326e)

    • 问题:API_KEY 返回 annotation.name()(如 "X-API-Key"),应该返回 "value"
    • 原因:混淆了 HTTP Header 名称和 Authorization 对象字段名
    • 修复:创建 AuthFieldMapper 类,明确字段映射逻辑
  3. 添加 AuthProvider 支持 (commit: 389418f)

    • 问题:StaticAuthApplier 遇到 Provider 时抛出 UnsupportedOperationException
    • 修复:添加延迟初始化 + setBeanContainer() 方法支持 Provider

✨ 新功能

  1. 支持 BASIC 认证字段选择 (commit: 0718cef)
    • 功能:通过 name 属性指定更新 username 还是 password
    • 示例:@RequestAuth(type=BASIC, name="username")name="password"
    • 默认行为:不指定 name 时更新 username(向后兼容)

🔧 重构改进

  1. 移除冗余 appliers 字段 (commit: 17eddc7)

    • 删除 HttpInfo.appliers 字段
    • 使用 staticAppliers + paramAppliers 明确区分
  2. 重构复用 AuthorizationDestinationSetter (commit: 7a02671)

    • 删除重复的 AuthDestinationSetter
    • 复用 FEL Tool 系统的 AuthorizationDestinationSetter
    • 确保架构一致性
  3. 简化 StaticAuthApplier (commit: 570595e)

    • 改用构造函数注入 BeanContainer(由 AnnotationParser 传递)
    • 移除 setBeanContainer() 方法和延迟初始化
    • Authorization 改为 final 字段,线程安全
  4. 添加 Fail-fast 验证 (commit: 6a2bc45)

    • 在构造函数入口使用 notNull() 验证 BeanContainer
    • 遵循 Fail-fast 原则

📚 文档

  1. 修复 Javadoc 错误 (commit: 9c9aa93)

    • 修复 H3 标题层次错误
    • 添加 table caption
    • 移除 HTML5 不支持的 summary 属性
  2. 添加完整文档 (commit: d3c7137)

    • HTTP_CLIENT_AUTH_USAGE.md(使用手册,900 行)
    • HTTP_CLIENT_AUTH_PRINCIPLES.md(原理手册,880 行)
    • 80+ 代码示例,5 个流程图,11 个表格

🧪 测试

  1. 添加单元测试 (commit: ef4e71d)
    • HttpInvocationHandlerTest: 7 个测试用例
    • AuthFieldMapperTest: 8 个测试用例
    • 所有测试通过(233 个测试,0 失败)

🧪 验证变更 / Verifying this Change

测试步骤 / Test Steps

  1. 编译检查

    mvn -B clean package -Dmaven.test.skip=true
  2. 运行所有测试

    cd framework/fit/java/fit-builtin/services/fit-http-classic/definition
    mvn test
  3. 验证 Example 07

    cd examples/fit-example/07-http-client-proxy
    mvn clean compile
    # 启动服务端
    mvn spring-boot:run -pl plugin-http-server
    # 另一个终端启动客户端
    mvn spring-boot:run -pl plugin-http-client
  4. 运行测试脚本

    cd examples/fit-example/07-http-client-proxy
    ./run_tests.sh basic

测试覆盖 / Test Coverage

  • 我已经添加了单元测试 / I have added unit tests
    • AuthFieldMapperTest: 8 个测试(BEARER/BASIC/API_KEY 字段映射)
    • HttpInvocationHandlerTest: 7 个测试(静态和参数级别认证)
  • 所有现有测试都通过 / All existing tests pass
    • 233 个测试全部通过,0 失败
  • 我已经进行了手动测试 / I have performed manual testing
    • Example 07 所有认证场景验证通过
    • 包括新增的 BASIC 双参数认证

测试结果

[INFO] Tests run: 233, Failures: 0, Errors: 0, Skipped: 0
[INFO] BUILD SUCCESS

✅ 贡献者检查清单 / Contributor Checklist

基本要求 / Basic Requirements:

  • 确保有 GitHub Issue 对应这个变更(微小变更如错别字除外)/ Make sure there is a Github issue filed for the change (trivial changes like typos excluded)
  • 你的 Pull Request 只解决一个 Issue,没有包含其他不相关的变更 / Your PR addresses just this issue, without pulling in other changes - one PR resolves one issue
  • PR 中的每个 commit 都有有意义的主题行和描述 / Each commit in the PR has a meaningful subject line and body

代码质量 / Code Quality:

  • 我的代码遵循项目的代码规范 / My code follows the project's coding standards
    • 使用 StringUtils.isNotBlank/equals
    • 代码行长度 ≤ 120 字符
    • 导入顺序符合 CodeFormatterFromIdea.xml
  • 我已经进行了自我代码审查 / I have performed a self-review of my code
  • 我已经为复杂的代码添加了必要的注释 / I have commented my code, particularly in hard-to-understand areas
    • AuthFieldMapper 详细注释了字段映射逻辑
    • StaticAuthApplier 注释了 BeanContainer 注入原理
    • RequestAuth 注解文档说明了 name 属性的语义重载

测试要求 / Testing Requirements:

  • 我已经编写了必要的单元测试来验证逻辑正确性 / I have written necessary unit-tests to verify the logic correction
  • 当存在跨模块依赖时,我尽量使用了 mock / I have used mocks when cross-module dependencies exist
  • 基础检查通过:mvn -B clean package -Dmaven.test.skip=true / Basic checks pass
  • 单元测试通过:mvn clean install / Unit tests pass

文档和兼容性 / Documentation and Compatibility:

  • 我已经更新了相应的文档 / I have made corresponding changes to the documentation
    • HTTP_CLIENT_AUTH_USAGE.md(使用手册)
    • HTTP_CLIENT_AUTH_PRINCIPLES.md(原理手册)
  • 如果有破坏性变更,我已经在 PR 描述中详细说明 / If there are breaking changes, I have documented them in detail
    • 无破坏性变更,所有改动向后兼容
  • 我已经考虑了向后兼容性 / I have considered backward compatibility
    • BASIC 认证默认行为保持不变(默认更新 username)
    • 新增功能通过可选的 name 属性实现

📋 附加信息 / Additional Notes

架构改进亮点

  1. 与 FEL Tool 系统一致

    • 复用 AuthorizationDestinationSetter
    • JSON 配置和注解方式底层机制统一
  2. 简化依赖注入

    • 从运行时 Setter 注入改为构造函数注入
    • BeanContainer 由 AnnotationParser 直接传递
    • 移除了 HttpInvocationHandler 中的 instanceof 检查
  3. 字段映射清晰化

    • 引入 AuthFieldMapper 工具类
    • 明确区分 HTTP Header 名称 vs Authorization 字段名
    • 详细的 Javadoc 表格说明映射关系
  4. 代码量减少

    • 移除重复代码(AuthDestinationSetter)
    • 简化 StaticAuthApplier(从 118 行减到 93 行)
    • 总计减少约 66 行代码

文档亮点

  • 📖 1780 行完整文档(使用手册 + 原理手册)
  • 🎯 80+ 代码示例覆盖所有使用场景
  • 📊 11 个表格清晰对比
  • 🔧 5 个详细的执行流程图
  • ✅ 最佳实践和常见问题解答

已知限制

  1. Provider 的刷新时机

    • Provider.provide() 在 StaticAuthApplier 构造时调用一次
    • 如需每次请求刷新,需要在 Provider 内部实现缓存机制
    • 或使用参数级别认证动态传入
  2. BASIC 认证的参数级别限制

    • 方法级别必须提供完整的 username + password
    • 参数级别只能更新已存在的字段
    • 这是设计上的权衡(更新 vs 完全替换)

后续计划

  • 考虑支持更多认证类型(OAuth2 等)
  • 优化 Provider 的生命周期管理
  • 添加更多集成测试

审查者注意事项 / Reviewer Notes:

  1. 重点关注

    • AuthFieldMapper 的字段映射逻辑是否正确
    • StaticAuthApplier 构造函数注入是否合理
    • name 属性的语义重载是否清晰
  2. 测试验证

    • 建议运行 Example 07 验证所有认证场景
    • 特别关注新增的 BASIC 双参数认证功能
  3. 文档审查

    • 文档是否清晰易懂
    • 示例代码是否准确

🤖 Generated with Claude Code

Co-Authored-By: Claude [email protected]

CodeCasterX and others added 11 commits September 30, 2025 15:43
Fixes critical architecture issue where static auth appliers and parameter
appliers were mixed in the same list, causing NullPointerException and
parameter count mismatch errors.

**Root Cause Analysis:**
1. NullPointerException: args=null for no-parameter methods
2. Count mismatch: staticAppliers + paramAppliers != args.length
3. Architecture flaw: mixed responsibilities in single applier list

**Solution - Separated Applier Architecture:**
- HttpInfo: Added staticAppliers and paramAppliers fields
- HttpInvocationHandler: Separated execution (static first, then param)
- AnnotationParser: Separated applier construction logic
- Added null-safety for args parameter

**Test Results:**
✅ No-parameter methods: testBearerStatic() now works
✅ Parameter methods: testBearerDynamic(token) now works
✅ All auth types: Bearer, Basic, API Key all functional
✅ Backward compatibility: existing appliers field maintained

Closes #328

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Add comprehensive unit tests for HttpInvocationHandler to cover the core
issues discovered and fixed in the HTTP client authentication system:

- Test null args handling to prevent NullPointerException
- Test parameter count mismatch detection
- Test static and parameter applier separation logic
- Test HTTP info missing exception handling
- Test multi-parameter method invocation

Additionally improve code style consistency by:
- Add this. prefix to all member variable accesses
- Add proper resource management for MockitoAnnotations.openMocks()
- Add explanatory comments for uncommon Mockito patterns

These tests fill critical coverage gaps in the HttpInvocationHandler
which previously had no direct unit tests, ensuring the parameter
processing bugs discovered cannot reoccur.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Clean up the temporary backward-compatibility code by removing the unused
appliers field, which was replaced by staticAppliers and paramAppliers.

**Changes:**
- HttpInfo: Remove appliers field and its getter/setter methods
- AnnotationParser.parseMethod(): Directly set paramAppliers without temp variable
- AnnotationParser.parseInterface(): Remove backward-compatibility merge logic
- HttpInvocationHandlerTest: Remove appliers initialization from test setup

**Benefits:**
- Clearer separation of concerns between static and parameter appliers
- Reduced code redundancy and maintenance burden
- Improved code readability with more explicit variable names

**Testing:**
✅ All 7 HttpInvocationHandler tests pass
✅ No functional changes, purely structural cleanup

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
…er mechanism

Unify the authentication architecture by making the @requestauth annotation
system reuse the existing AuthorizationDestinationSetter and Authorization
mechanisms, ensuring consistency with the FEL Tool system.

**Architecture Improvements:**
- Remove AuthDestinationSetter (duplicate implementation)
- Modify StaticAuthApplier to directly create Authorization objects
- Modify RequestAuthResolver to use AuthorizationDestinationSetter
- Both annotation-based and JSON-based systems now use the same mechanism

**Changes:**
- StaticAuthApplier: Create Authorization objects directly via factory methods
- RequestAuthResolver: Return AuthorizationDestinationSetter with appropriate keys
- Remove AuthDestinationSetter and its test file
- Update RequestAuthResolverTest to use AuthorizationDestinationSetter

**Benefits:**
- Eliminates code duplication in authentication logic
- Ensures architectural consistency across different configuration methods
- Simplifies maintenance with a single source of truth
- Better follows the DestinationSetter design pattern

**Testing:**
✅ All 225 tests pass
✅ RequestAuthResolverTest: 3/3 tests pass
✅ HttpInvocationHandlerTest: 7/7 tests pass
✅ No functional changes, purely architectural refactoring

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Fix runtime error when using @requestauth with AuthProvider in class/method level
static authentication scenarios.

**Problem:**
- StaticAuthApplier threw UnsupportedOperationException when encountering AuthProvider
- Example 07 failed to start with "AuthProvider is not supported" error
- Provider-based auth (DynamicTokenProvider, CustomSignatureProvider, ApiKeyProvider)
  was not working in static contexts

**Solution:**
- Add lazy initialization support to StaticAuthApplier
- Add setBeanContainer() method to inject BeanContainer at runtime
- Modify HttpInvocationHandler to call setBeanContainer() before applying static auth
- Cache Authorization object after creation for performance

**Implementation:**
- StaticAuthApplier: Store RequestAuth annotation and delay Authorization creation
- If no Provider: Create Authorization immediately in constructor
- If Provider used: Create Authorization when setBeanContainer() is called
- HttpInvocationHandler: Inject BeanContainer before calling staticApplier.apply()

**Testing:**
✅ All 225 tests pass
✅ HttpInvocationHandlerTest: 7/7 tests pass
✅ No breaking changes to existing functionality

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Fix a bug in parameter-level authentication where API_KEY incorrectly mapped to
annotation.name() instead of the "value" field of ApiKeyAuthorization.

**Problem Analysis:**
1. Bug: RequestAuthResolver.getAuthorizationKey() for API_KEY returned annotation.name()
   (e.g., "X-API-Key"), but should return "value" to update ApiKeyAuthorization.value field
2. Root cause: Confusion between HTTP key name and Authorization object field name
3. Why tests didn't catch it: Tests only verified Setter type, not the internal field name

**Solution: Introduce AuthFieldMapper (Approach 5)**
- Create dedicated AuthFieldMapper class for centralized field mapping logic
- Clear documentation explaining the mapping rationale
- Maintains consistency with FEL Tool system's AuthorizationDestinationSetter mechanism

**Changes:**
1. New file: AuthFieldMapper.java
   - Maps AuthType to Authorization object field names
   - Comprehensive Javadoc with table showing all mappings
   - BEARER → "token", BASIC → "username", API_KEY → "value"

2. Modified: RequestAuthResolver.java
   - Remove complex getAuthorizationKey() method
   - Use AuthFieldMapper.getParameterAuthField() for clear intent
   - Updated documentation

3. New tests: AuthFieldMapperTest.java (5 tests)
   - Verify correct field mappings for all auth types
   - Specifically test API_KEY returns "value" not "key"
   - Validate compatibility with Authorization implementations

4. Enhanced: RequestAuthResolverTest.java
   - Add comments explaining the bug that was found
   - Tests now serve as regression prevention

**Key Insights:**
- API Key has two concepts:
  * "key" field: HTTP Header/Query name (e.g., "X-API-Key")
  * "value" field: Actual API key value (parameter-level updates this)
- AuthFieldMapper makes this distinction explicit and well-documented

**Testing:**
✅ All 230 tests pass (5 new tests added)
✅ AuthFieldMapperTest: 5/5 tests pass
✅ RequestAuthResolverTest: 3/3 tests pass
✅ Maintains 100% consistency with FEL Tool system

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Fix Javadoc compilation errors caused by HTML5 incompatible tags and attributes.

**Issues Fixed:**
1. Replace <h3> headings with <p><b> for consistency (H3 requires H2, H1 hierarchy)
2. Remove 'summary' attribute from table (not supported in HTML5)
3. Keep 'caption' element for table description

**Changes:**
- AuthFieldMapper.java: Replace h3 tags with p+b tags, remove summary attribute
- RequestAuthResolver.java: Replace h3 tags with p+b tags

**Verification:**
✅ mvn javadoc:javadoc compiles successfully
✅ All documentation formatting preserved
✅ HTML5 compliant

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
…eter-level authentication

Enable parameter-level BASIC authentication to specify which field to update (username or
password) using the name attribute, allowing dual-parameter authentication scenarios.

**Core Changes:**

1. **AuthFieldMapper.java**
   - Modified getParameterAuthField() to accept nameAttribute parameter
   - BASIC auth: name="username" or name="password" selects field to update
   - Default behavior: returns "username" when name is not specified (backward compatible)
   - API_KEY: name specifies HTTP Header/Query name (different semantic)
   - BEARER: name attribute is ignored
   - Use StringUtils.isNotBlank() and StringUtils.equals() for string operations
   - Fixed Javadoc line lengths to comply with 120-character limit

2. **RequestAuthResolver.java**
   - Pass annotation.name() to AuthFieldMapper.getParameterAuthField()
   - Enables BASIC auth field selection based on name attribute

3. **RequestAuth annotation**
   - Enhanced Javadoc to document name attribute semantics for different auth types
   - Added table showing name attribute meaning per auth type
   - Clarified BASIC auth usage: name selects target field (username/password)

**Testing:**

4. **AuthFieldMapperTest.java** (added 3 new tests, total 8 tests)
   - testBasicAuthFieldDefault(): Verify default returns "username"
   - testBasicAuthFieldExplicitUsername(): Test name="username"
   - testBasicAuthFieldPassword(): Test name="password"
   - testBasicAuthFieldInvalidName(): Verify invalid name throws exception
   - Updated existing tests to use new method signature

5. **Example 07 Enhancements**
   - TestAuthInterface: Added testBasicDynamicUsername() and testBasicDynamicBoth()
   - TestAuthClient: Implemented both methods with proper annotations
   - TestAuthServerController: Added corresponding endpoints
   - TestClientController: Added method invocation support
   - run_tests.sh: Added two new BASIC auth test cases

**Usage Examples:**

```java
// Method-level: Complete BASIC auth, parameter overrides username
@requestauth(type = BASIC, username = "static-user", password = "static-password")
String test(@requestauth(type = BASIC) String username);

// Parameter-level: Separately override username and password
@requestauth(type = BASIC, username = "base-user", password = "base-password")
String test(
    @requestauth(type = BASIC, name = "username") String user,
    @requestauth(type = BASIC, name = "password") String pwd
);
```

**Key Design:**
- name attribute has semantic overloading across auth types
- BASIC: Specifies Authorization object field name
- API_KEY: Specifies HTTP Header/Query name
- Method-level BASIC auth must provide complete username+password
- Parameter-level updates specific fields via authorizationInfo()

**Validation:**
✅ All 233 tests pass
✅ Javadoc compiles without errors/warnings
✅ Code formatting complies with CodeFormatterFromIdea.xml
✅ Example 07 compiles and runs successfully

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
…or BeanContainer

Remove the setBeanContainer() method and lazy initialization pattern in StaticAuthApplier,
replacing it with direct constructor injection using the BeanContainer already available
in AnnotationParser.

**Problem:**
- StaticAuthApplier used lazy initialization with setBeanContainer() called from HttpInvocationHandler
- This created unnecessary complexity and runtime dependency injection
- AnnotationParser already had BeanContainer available but wasn't using it
- The setBeanContainer() approach required runtime checks and state management

**Solution:**
- Modified StaticAuthApplier constructor to accept BeanContainer parameter
- AnnotationParser now passes its BeanContainer when creating StaticAuthApplier instances
- Removed setBeanContainer() method entirely
- Removed lazy initialization logic and state management
- Simplified HttpInvocationHandler by removing BeanContainer injection code

**Changes:**

1. **StaticAuthApplier.java**
   - Changed constructor: `StaticAuthApplier(RequestAuth, BeanContainer)`
   - Removed `cachedAuthorization` field, replaced with final `authorization` field
   - Authorization created immediately in constructor
   - Removed `setBeanContainer()` method
   - Simplified `apply()` method - no more null checks
   - Reduced from 118 lines to 95 lines

2. **AnnotationParser.java**
   - `getClassLevelAuthAppliers()`: Pass `this.beanContainer` to StaticAuthApplier
   - `getMethodLevelAuthAppliers()`: Pass `this.beanContainer` to StaticAuthApplier

3. **HttpInvocationHandler.java**
   - Removed instanceof check and setBeanContainer() call
   - Simplified staticApplier loop back to basic iteration

**Benefits:**
- ✅ Simpler design: Constructor injection instead of setter injection
- ✅ Earlier error detection: Failures happen at construction time, not runtime
- ✅ Immutability: Authorization is now final, thread-safe
- ✅ Less code: Removed 31 lines of complexity
- ✅ Clear dependencies: BeanContainer dependency explicit in constructor
- ✅ Better performance: No runtime type checks or conditional initialization

**Testing:**
✅ All 233 tests pass
✅ Example 07 compiles and runs successfully
✅ No behavioral changes, purely refactoring

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
…lier

Add notNull validation at constructor entry point and simplify createAuthorizationFromAnnotation
by removing redundant null check, following the fail-fast principle.

**Changes:**
- Add `notNull(beanContainer, "The bean container cannot be null.")` in constructor
- Remove redundant null check in createAuthorizationFromAnnotation method
- BeanContainer is guaranteed non-null by AnnotationParser, validate early at entry point

**Benefits:**
- ✅ Fail-fast: Errors detected immediately at construction time
- ✅ Clearer contract: BeanContainer is required, not optional
- ✅ Simplified logic: No need for null check in private method
- ✅ Consistent validation: Follows same pattern as AnnotationParser

**Testing:**
✅ AuthFieldMapperTest: 8/8 tests pass
✅ No behavioral changes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Add detailed usage manual and principles guide for @requestauth annotation system,
covering all authentication types, usage scenarios, design principles, and internals.

**Documentation Structure:**

1. **HTTP_CLIENT_AUTH_USAGE.md** - User-facing usage manual
   - Quick start guide
   - Authentication types (Bearer, Basic, API Key, Custom Provider)
   - Usage scenarios (interface/method/parameter levels)
   - Best practices (security, configuration, Provider patterns)
   - Common Q&A
   - Complete examples with HTTP request formats

2. **HTTP_CLIENT_AUTH_PRINCIPLES.md** - Internal principles guide
   - Architecture overview with component diagrams
   - Core components (AnnotationParser, StaticAuthApplier, AuthFieldMapper, etc.)
   - Detailed workflow with execution traces
   - Key design decisions (constructor injection, name attribute overloading)
   - Consistency with FEL Tool system
   - Extension guide for custom authentication types

**Content Highlights:**

- 📖 80+ code examples covering all scenarios
- 🎯 5 detailed execution flow diagrams
- 📊 Component responsibility matrix
- 🔧 Extension patterns for custom authentication
- ⚖️ Design decision rationales
- ✅ Best practices and anti-patterns

**Coverage:**

- All 4 authentication types: Bearer, Basic, API Key, Custom
- 3-level configuration: Interface, Method, Parameter
- Static vs dynamic (Provider) authentication
- Field update mechanism for parameter-level auth
- BASIC auth dual-parameter support with name attribute
- Integration with BeanContainer and FEL Tool system

**Target Audience:**

- Usage Manual: Developers using HTTP client authentication
- Principles Guide: Framework developers and contributors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
@CodeCasterX CodeCasterX requested review from a team and wjn1584 and removed request for a team October 2, 2025 14:41
@CodeCasterX CodeCasterX self-assigned this Oct 2, 2025
@CodeCasterX CodeCasterX added type: enhancement A general enhancement in: fit Issues in FIT modules labels Oct 2, 2025
@CodeCasterX CodeCasterX added this to the 3.5.4 milestone Oct 2, 2025
@CodeCasterX CodeCasterX merged commit c7f623a into 3.5.x Oct 2, 2025
6 checks passed
@CodeCasterX CodeCasterX deleted the fit-bugfix-http-client-auth branch October 2, 2025 14:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

in: fit Issues in FIT modules type: enhancement A general enhancement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[fit] Critical: Parameter-Applier count mismatch in HttpInvocationHandler causes potential ArrayIndexOutOfBoundsException

2 participants