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

如何阻止Spring Security通过引用访问实体并解决React静态资源401问题

解决方案

核心思路是把后端接口和静态资源路径做明确隔离,所有后端接口统一使用/api前缀,这样就可以批量放行所有非/api前缀的静态资源/前端路由,同时保证所有接口的权限控制生效。

步骤1:统一后端接口前缀

确保所有后端接口都以/api开头,避免漏配导致接口暴露,推荐用全局配置自动添加前缀,无需手动修改每个Controller:
在你现有的MvcSecurityConfig类中添加如下方法,自动给所有@RestController注解的接口加上/api前缀:

@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
    // 所有@RestController类的接口自动添加/api前缀
    configurer.addPathPrefix("/api", clazz -> clazz.isAnnotationPresent(RestController.class));
}

如果你已经手动给部分接口加了/api前缀,把那部分手动前缀删掉即可,避免重复。

步骤2:修改Spring Security配置

调整权限匹配规则,先匹配接口权限,剩余所有非接口请求全部放行,修改WebSecurityConfig类的configure方法如下:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.cors().and().csrf().disable()
            .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
            .authorizeRequests()
            // 放行公开的接口
            .antMatchers("/api/auth/**", "/api/test/**").permitAll()
            // 其余所有/api开头的接口必须认证后访问
            .antMatchers("/api/**").authenticated()
            // 保留管理员路径权限控制(如果是前端路由也可以移到前端做权限校验)
            .antMatchers("/admin").hasRole("ADMIN")
            // 剩余所有非/api开头的请求(静态资源、前端路由)全部放行
            .anyRequest().permitAll();

    http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}

验证效果

  • 所有React静态资源、前端路由都可以直接访问,不会被Security拦截,无需再手动添加路径放行规则
  • 所有后端接口都以/api开头,除了公开接口外都需要认证,不会出现未授权访问数据表接口的问题

内容的提问来源于stack exchange,提问作者Джейк Морган

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:24:03