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
相关产品推荐
相关产品推荐

