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

Spring Boot 2.7.3基于表达式的访问控制配置异常求助

Spring Security 2.7.x 中authorizeHttpRequests的SpEL表达式配置问题

在Spring Boot 2.7.3搭配Spring Security Starter时,弃用authorizeRequests改用authorizeHttpRequests后,原SpEL表达式的写法会抛出类型不匹配错误:要求AuthorizationManager<RequestAuthorizationContext>类型,但传入的是字符串。而旧的authorizeRequests方法可以正常运行。

解决方案

在新的authorizeHttpRequests配置中,需要将SpEL表达式封装为AuthorizationManager实例,使用AuthorizationManagers.expression()方法即可快速实现:

import static org.springframework.security.authorization.AuthorizationManagers.expression;

// ...

http
    .authorizeHttpRequests(authorize -> authorize
        .antMatchers("/user/**").access(expression("@webSecurity.check(authentication, request)"))
        // 其他授权规则配置
    );

原理说明

Spring Security 5.7+(对应Spring Boot 2.7+)重构了授权架构,authorizeHttpRequests采用基于AuthorizationManager的新模型,不再直接接受SpEL字符串。AuthorizationManagers.expression()方法会将传入的SpEL表达式转换为符合要求的AuthorizationManager实例,适配新的API规范。

需要确保webSecurity bean已正确定义,且check方法的参数类型匹配:第一个参数为Authentication,第二个参数为HttpServletRequest(RequestAuthorizationContext中的request对象实际是HttpServletRequest)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:30:49