成功登录后发送自定义对象作为响应以及状态码200,而无需内部重定向

时间:2019-06-26 09:44:51

标签: java spring-boot spring-security

一旦用户通过身份验证,我想返回用户详细信息对象(自定义对象)作为对客户端的响应。我为此配置了customSuccessHandler,但是我不确定如何在不从handle()方法重定向的情况下发送对象作为响应。

最初,我将其重定向到另一个用@RequestMapping("/user")注释的方法,但这将响应状态发送为302(重定向),这是客户端(角度UI)不可接受的。我要解决的其他选择是询问Ui再次请求("/user")并获取所需的详细信息,但这将导致客户不必要的额外负担,造成额外的休息时间。有没有更好的方法来实现这一目标?

我在handle()中的CustomSuccessHandler方法

@Override
protected void handle(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException {
    HttpSession session = request.getSession(true);     
    Users user = getUserDetails(); //this gets the user details
    session.setAttribute("user",user); 
    response.getWriter().append("OK");
    response.setStatus(200);
}

我要实现的功能是在成功登录用户后,我的后端代码应以状态代码200答复,并且还提供用户详细信息,而无需任何额外的REST调用。

1 个答案:

答案 0 :(得分:0)

不太确定这是否是最佳做法,但是可以在handle(..)

中进行操作
response.getWriter().append("OK");

您也可以这样做:

User user = getUserDetails();
ObjectMapper om = new ObjectMapper();
response.getWriter().append(om.writeValueAsString(user));

请记住,您当然应该使用一些DTO来存储写给响应的用户详细信息,而这些信息不会暴露密码或任何其他敏感数据。