我有一个应用程序并运行REST身份验证工作,但现在想要添加密码到期(这将通过石英作业设置默认用户类的属性 - 布尔密码已过期)
有人能指出我正确的方向来处理过期的密码异常,返回类似于403的内容,表示在前端而不是401上输入新密码。
我在日志中看到以下内容:
DEBUG userdetails.DefaultPostAuthenticationChecks - User account credentials have expired
DEBUG rest.RestAuthenticationFilter - Authentication failed: User credentials have expired
DEBUG bearer.BearerTokenAuthenticationFailureHandler - Sending status code 401 and header WWW-Authenticate: Bearer
假设我必须在某处覆盖某个方法,但我不熟悉grails并且不确定如何执行此操作。
由于
答案 0 :(得分:0)
找出解决方案。
供其他人参考: - 1)禁用承载令牌支持(不确定是否需要它但是它的工作)
grails.plugin.springsecurity.rest.token.validation.useBearerToken = false
grails.plugin.springsecurity.rest.token.validation.headerName = 'X-Auth-Token'
2)创建一个实现
的新类class CustomRestAuthenticationFailureHandler implements AuthenticationFailureHandler {@
Override
void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) {
def statuscode = HttpServletResponse.SC_FORBIDDEN
...
// do something based on the exception message and change the status or add a message to response.body
}
3)将bean添加到resources.groovy
beans = {
restAuthenticationFailureHandler(CustomRestAuthenticationFailureHandler) {
}
}