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

Spring DATA REST应用中如何配置Spring Security允许HAL Browser免认证访问

别担心,这个问题其实挺常见的——就是Spring Security默认拦截了所有请求,包括HAL Browser的静态资源和入口端点。咱们只需要在Security配置里,把HAL Browser相关的路径放开,允许匿名访问就行。下面给你两种常用的配置方案,对应不同版本的Spring Security:

方式一:基于WebSecurityConfigurerAdapter(旧版Spring Security)

如果你的项目用的是Spring Security 5.7之前的版本,那可以继承WebSecurityConfigurerAdapter来配置:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            // 先放开HAL Browser相关的所有路径,允许匿名访问
            .authorizeRequests()
                .antMatchers("/", "/hal-browser/**", "/browser/**", "/api/profile/**").permitAll()
                // 其他所有API请求需要认证
                .anyRequest().authenticated()
                .and()
            // 按需配置认证方式,比如HTTP Basic或表单登录
            .httpBasic();
    }
}

这里要注意几个细节:

  • /hal-browser/**和/browser/**是HAL Browser的静态资源路径,不同版本的依赖可能路径略有差异,你可以根据实际项目的路径调整
  • /api/profile/**是Spring Data REST暴露的元数据端点,HAL Browser需要它来渲染API文档,所以必须放开
方式二:基于SecurityFilterChain(新版Spring Security推荐)

从Spring Security 5.7开始,官方推荐使用SecurityFilterChain替代WebSecurityConfigurerAdapter,配置方式更灵活:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                // 放开HAL相关路径的匿名访问权限
                .requestMatchers("/", "/hal-browser/**", "/browser/**", "/api/profile/**").permitAll()
                // 其余请求必须认证
                .anyRequest().authenticated()
            )
            // 配置认证方式,比如HTTP Basic
            .httpBasic();
        
        return http.build();
    }
}

额外注意事项

  • 如果你的项目开启了CSRF保护,HAL Browser在发送PUT/DELETE等请求时可能会遇到问题,你可以暂时关闭CSRF测试(http.csrf().disable()),但生产环境建议保留CSRF,并确保HAL Browser能正确传递CSRF令牌
  • 确认你的spring-boot-starter-hal-browser依赖已经正确引入,版本要和Spring Boot/Spring Data REST兼容

这样配置后,HAL Browser就能无需认证直接访问啦,我之前这么配过好几次,都没问题~

内容的提问来源于stack exchange,提问作者Thilina Kalum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:25:26