使用HTTPMessageConverter的Spring WEB / MVC响应编写器

时间:2015-04-19 08:31:14

标签: spring-mvc spring-security

我使用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等)。

有没有办法可以使用消息转换器机制写入响应正文?

1 个答案:

答案 0 :(得分:1)

您可以创建一个能够处理身份验证失败的控制器,然后在AuthenticationFailureHandler中将请求转发给您的身份验证失败控制器。在控制器中,您可以轻松访问Spring的消息转换器机制。

要转发请求,请查看下面的代码段(取自Spring {#1}},SimpleUrlAuthenticationFailureHandler是转发目标,这是您的身份验证错误处理的路径控制器):

defaultFailureUrl