Dia*_*ana 4 rest spring spring-mvc
在 spring 休息中,我需要从过滤器类的 doFilter() 发送身份验证错误。作为回应,我需要发送带有状态、消息和错误代码等字段的 json。请建议如何实现。我们没有使用 spring boot.Below 是关于身份验证错误的示例响应
{“responseCode”:“错误代码”,“responseMessage”:“一些错误消息”,“responseStatus”:“失败”}
在 doFiler() 中,我正在验证令牌,如果它无效,我需要发送上面的示例响应。
cas*_*lin 18
假设您将 JacksonObjectMapper公开为 Spring bean,您可以将以下内容用于 a OncePerRequestFilter:
@Component
@RequiredArgsConstructor
public class MyFilter extends OncePerRequestFilter {
private final ObjectMapper mapper;
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
FilterChain filterChain) throws IOException {
Map<String, Object> errorDetails = new HashMap<>();
errorDetails.put("message", "Invalid token");
httpServletResponse.setStatus(HttpStatus.FORBIDDEN.value());
httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE);
mapper.writeValue(httpServletResponse.getWriter(), errorDetails);
}
}
Run Code Online (Sandbox Code Playgroud)
对于普通的 servlet Filter,解决方案大致相同:
@Component
@RequiredArgsConstructor
public class MyFilter implements Filter {
private final ObjectMapper mapper;
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse,
FilterChain filterChain) throws IOException {
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
Map<String, Object> errorDetails = new HashMap<>();
errorDetails.put("message", "Invalid token");
httpServletResponse.setStatus(HttpStatus.FORBIDDEN.value());
httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE);
mapper.writeValue(httpServletResponse.getWriter(), errorDetails);
}
@Override
public void destroy() {
}
}
Run Code Online (Sandbox Code Playgroud)
上面的示例依赖于构造函数注入并使用 Lombok@RequiredArgsConstructor生成一个构造函数,该构造函数接收标记为 的字段的值final。
您还可以Map<String, Object>根据需要替换任意 POJO 的 。
| 归档时间: |
|
| 查看次数: |
5811 次 |
| 最近记录: |