Grails 5.2.5集成Spring Security 5.6.0时403自定义错误页面不生效求助
问题解决步骤
1. 修正静态规则的权限范围
在application.groovy的staticRules里,把/error的匹配规则改成覆盖所有子路径:
grails.plugin.springsecurity.controllerAnnotations.staticRules = [ // 保留其他原有规则 [pattern: '/error/**', access: ['permitAll']], // 保留其他原有规则 ]
原来的/error只能匹配根路径,无法覆盖/error/denied,导致Spring Security跳转至自定义页面时再次触发权限拦截,最终返回默认403页面。
2. 配置Spring Security的权限拒绝处理器
在application.groovy中添加以下配置,指定权限拒绝时的跳转目标:
grails.plugin.springsecurity.accessDeniedHandler = { errorPage = '/error/denied' }
这个配置会让Spring Security捕获AccessDeniedException时,主动转发到你的自定义错误处理路径,而非直接返回默认的HTTP 403响应。
3. 校验视图与控制器的正确性
- 确认
grails-app/views/error/denied.gsp文件存在且内容无误; - 确认
ErrorController的denied方法逻辑正常,无异常抛出:
def denied() { render(view: '/error/denied', model: [errorMessage: "403 sample error"]) }
4. 清理缓存并重启应用
执行grails clean清除缓存,然后重启应用,测试权限拒绝场景。
额外排查方向
如果以上步骤无效,可以检查:
- 确认
Requestmap中没有对/error/denied设置额外权限规则,避免该路径被意外拦截; - 查看应用日志,确认
AccessDeniedException是否正常抛出,以及转发到/error/denied时是否存在其他错误。
内容的提问来源于stack exchange,提问作者Sumon Bappi
相关产品推荐
相关产品推荐

