【发布时间】:2020-02-12 13:28:04
【问题描述】:
我正在我的应用程序中使用 JWT 实现 Spring 安全性,并且每当进行未经授权的调用时,它都会返回以下响应
@Override
public void commence(HttpServletRequest request,
HttpServletResponse response,
AuthenticationException authException) throws IOException {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
}
响应 json 如下所示
{
"timestamp": 1497832267379,
"status": 401,
"error": "Unauthorized",
"message": "Unauthorized",
"path": "/path"
}
我可以发送自己的自定义响应,例如:
{
"code":401,
"message":"The request is unauthorized"
}
感谢任何帮助
编辑
我将代码更新为以下格式:
@Override
public void commence(HttpServletRequest request,
HttpServletResponse response,
AuthenticationException authException) throws IOException {
//response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
Status unauthorizedEntry = new Status();
unauthorizedEntry.setCode(401);
unauthorizedEntry.setMessage("Unauthorized Entry");
Map<String, Object> unauthorizedEntryResponse = new HashMap<>();
unauthorizedEntryResponse.put("status", unauthorizedEntry);
objectMapper.writeValue(response.getOutputStream(), unauthorizedEntry);
response.flushBuffer();
}
我的状态类如下:
public class Status {
int code;
String message;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
现在我收到 200 响应,但屏幕上没有显示任何内容。它是完全空白的。任何帮助表示赞赏!
【问题讨论】:
-
您应该能够使用自定义
AuthenticationFailureHandler覆盖响应。 -
目前我正在重写开始方法
-
您的新代码实际上并未设置状态。你需要
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);才能工作。您必须告诉 servlet 引擎状态发生了变化,否则它将默认为 200。