首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕获Grails Spring-Security BasicAuth故障?

如何捕获Grails Spring-Security BasicAuth故障?
EN

Stack Overflow用户
提问于 2014-03-17 23:25:48
回答 1查看 344关注 0票数 1

我有一个Spring (2.2.1) web-app,在所有控制器上都为BasicAuth配置了Security插件(1.2.7.3) (它是一个带有RESTful有效负载的“服务应用”,没有HTML )。当身份验证失败(错误的用户is /密码/帐户锁定)时,响应正文是一个丑陋的Tomcat HTML格式的字符串。我更喜欢生成我自己的(JSON)响应,但似乎不能在异常传递给Tomcat之前拦截它。

我尝试过配置adh.errorPagefailureHandle.defaultFailureUrl,但这些控制器/操作似乎从未被调用过。

我需要配置什么才能做到这一点?

编辑:来自Config.groovy的一些附加设置

代码语言:javascript
复制
...filterChain.chainMap = [
    '/error/**': 'JOINED_FILTERS,-basicAuthenticationFilter,-basicExceptionTranslationFilter',
    '/**': 'JOINED_FILTERS,-exceptionTranslationFilter' ]
...adh.errorPage = '/error/denied'
...controllerAnnotations.staticRules = [ '/error/**': ['permitAll'] ]
...failureHandler.defaultFailureUrl = '/error/authfail'

当然,我有一个定义了上述方法的ErrorController.groovy

另外:我定义了一个ApplicationListener来统计失败的登录,并且我注意到它被调用了两次,用于单个REST调用-到错误控制器的重定向也会失败吗?

Edit2:我的假设是正确的:"/grails-errorhandler“在初始失败后验证失败。我不知道这是否是正确的方法,但现在我有:

代码语言:javascript
复制
...filterChain.chainMap = [
                '/<each controller listed separately>/**': 'JOINED_FILTERS,-exceptionTranslationFilter']
]

而且似乎不需要任何controllerAnnotations.staticRules(??)而且事情看起来是可行的!

EN

回答 1

Stack Overflow用户

发布于 2014-03-17 23:30:33

在不知道返回什么的情况下,我只能假设403 (禁止的)正在返回给您的客户端。在这种情况下,您始终可以将响应代码映射到您自己控制器,以返回正确的JSON消息。例如

grails-app/conf/UrlMappings.groovy

代码语言:javascript
复制
class UrlMappings {
  static mappings {
    "403" (controller: "error", action: "forbidden")
    "404" (controller: "error", action: "notFound")
    "500" (controller: "error", action: "internalError")
  }
}

有关映射、响应代码等的更多信息,可以在documentation for URL Mappings中找到。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22458386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档