Grails 3构建RESTful API异常:调用接口返回登录URL而非JSON响应
解决Grails 3 REST API重定向到登录页的问题
你的API请求大概率被Grails的安全拦截组件(多数是Spring Security)拦截了,所以才会返回登录URL而非预期的JSON响应。下面是具体的排查和解决步骤:
1. 确认是否启用了Spring Security
先检查项目的build.gradle文件,看看是否引入了spring-security-core插件依赖。如果存在这个依赖,那就是安全配置在拦截未认证请求,默认会将这类请求重定向到登录页面。
2. 配置安全规则放行API端点
如果使用的是Spring Security Core插件,你需要在grails-app/conf/application.groovy(或Config.groovy)中添加拦截规则,让roomCheckAPI/login/**路径允许所有访问:
grails.plugin.springsecurity.interceptUrlMap = [ '/roomCheckAPI/login/**': ['permitAll'], // 保留你原有其他安全规则... ]
或者,也可以直接在控制器的validateUser方法上添加@Secured注解来放行:
import org.springframework.security.access.annotation.Secured // ... @Secured('permitAll') def validateUser() { // 你的方法逻辑... }
3. 优化请求头明确要求JSON响应
测试时建议给curl请求加上Accept头,明确告知服务器你期望JSON格式的响应,避免格式协商问题:
curl -v -g -k -H "Accept: application/json" https://localhost:8444/appName/roomCheckAPI/login/user1
4. 额外检查点
- 确认URL映射正确性:你的
URL Mappings.groovy配置看起来没问题,注意控制器名的大小写(MyExampleController对应的短名是myExample,和你配置的一致)。 - 检查
allowedMethods配置:你已设置validateUser : ["GET"],和curl的GET请求匹配,这部分无需调整。
调整配置后重启应用,再测试应该就能得到预期的JSON响应了。
内容的提问来源于stack exchange,提问作者user2529774
相关产品推荐
相关产品推荐

