我有一个Spring (2.2.1) web-app,在所有控制器上都为BasicAuth配置了Security插件(1.2.7.3) (它是一个带有RESTful有效负载的“服务应用”,没有HTML )。当身份验证失败(错误的用户is /密码/帐户锁定)时,响应正文是一个丑陋的Tomcat HTML格式的字符串。我更喜欢生成我自己的(JSON)响应,但似乎不能在异常传递给Tomcat之前拦截它。
我尝试过配置adh.errorPage和failureHandle.defaultFailureUrl,但这些控制器/操作似乎从未被调用过。
我需要配置什么才能做到这一点?
编辑:来自Config.groovy的一些附加设置
...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“在初始失败后验证失败。我不知道这是否是正确的方法,但现在我有:
...filterChain.chainMap = [
'/<each controller listed separately>/**': 'JOINED_FILTERS,-exceptionTranslationFilter']
]而且似乎不需要任何controllerAnnotations.staticRules(??)而且事情看起来是可行的!
发布于 2014-03-17 23:30:33
在不知道返回什么的情况下,我只能假设403 (禁止的)正在返回给您的客户端。在这种情况下,您始终可以将响应代码映射到您自己控制器,以返回正确的JSON消息。例如
grails-app/conf/UrlMappings.groovy
class UrlMappings {
static mappings {
"403" (controller: "error", action: "forbidden")
"404" (controller: "error", action: "notFound")
"500" (controller: "error", action: "internalError")
}
}有关映射、响应代码等的更多信息,可以在documentation for URL Mappings中找到。
https://stackoverflow.com/questions/22458386
复制相似问题