You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java模块访问权限异常:Spring Security配置相关问题排查

问题排查与解决方法

错误根源分析

这个InaccessibleObjectException并非Spring Security的requestMatchers配置问题,而是Java模块系统的权限限制导致的:Java 9+的模块化机制中,java.net.http模块没有向未命名模块(unnamed module)开放java.net.http包,使得反射无法访问HttpRequest的protected构造方法。

具体解决步骤

1. 添加JVM启动参数开放模块权限

直接在JVM启动时添加参数,允许未命名模块访问java.net.http包:

--add-opens java.net.http/java.net.http=ALL-UNNAMED
  • 如果用Maven运行,在pom.xml的Spring Boot插件中配置:
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>--add-opens java.net.http/java.net.http=ALL-UNNAMED</jvmArguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
  • 如果是IDE运行,在运行配置的VM options中添加上述参数。

2. 排查触发反射的依赖/代码

检查项目中以下部分:

  • 自定义的jwtService实现:是否在解析JWT或调用外部服务时使用了java.net.http.HttpRequest,且通过反射创建实例?
  • 第三方HTTP客户端依赖:是否使用了旧版本的库,这些库依赖反射访问java.net.http的内部API?尝试升级这些依赖到适配Java模块化的版本。

3. 验证Spring Security配置(排除疑虑)

你的requestMatchers("/api/v1/auth/**").permitAll()配置是正确的,且JWT过滤器中已通过request.getServletPath().contains("/api/v1/auth")跳过了该路径的认证处理。可以在过滤器的判断分支添加日志,确认请求是否被正确放行:

if(request.getServletPath().contains("/api/v1/auth")){
    System.out.println("放行/auth路径请求:" + request.getServletPath());
    filterChain.doFilter(request,response);
    return;
}

内容的提问来源于stack exchange,提问作者Thiu Lễ Văn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:53:28