我使用spring-security:3.2.5.RELEASE和spring-webmvc:4.1.3.RELEASE。
我需要返回有关登录失败的其他信息(添加原因,例如,用户被锁定,凭据错误等)。
我想使用AuthenticationFailureHandler
并将附加信息写入响应中:
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
AuthenticationException exception) throws IOException, ServletException {
logger.debug("Returning UNAUTHORIZED HttpStatus: " + exception.getMessage());
try (PrintWriter writer = response.getWriter();){
writer.write(jsonUtils.toJson(new ErrorDTO<String>(HttpStatus.MULTI_STATUS, 234546, exception.getMessage())));
response.sendError(HttpServletResponse.SC_UNAUTHORIZED,
"Authentication Failed: " + exception.getMessage());
}
}
问题是,由于我不会抛出Spring的消息转换器机制,这个解决方案打破了多种内容类型的支持(例如,xml,JSON等)。
有没有办法可以使用消息转换器机制写入响应正文?
答案 0 :(得分:1)
您可以创建一个能够处理身份验证失败的控制器,然后在AuthenticationFailureHandler
中将请求转发给您的身份验证失败控制器。在控制器中,您可以轻松访问Spring的消息转换器机制。
要转发请求,请查看下面的代码段(取自Spring {#1}},SimpleUrlAuthenticationFailureHandler
是转发目标,这是您的身份验证错误处理的路径控制器):
defaultFailureUrl