J'utilise un filtre pour vérifier si l'utilisateur est connecté (le jeton est valide), si le jeton n'est pas valide, j'ai défini un attribut appelé "erreur" avec les détails de l'erreur, voici mon contrôleurProblème de contrôleur de démarrage de ressort
@RestController
public class HomeController {
@RequestMapping(value = "secure/info", method = RequestMethod.POST)
public Object login(@RequestBody User user,@RequestAttribute(name="error") AppError error) {
if(error!=null) return error ;
return "information";
}
et voici mon filtre:
@Override
public void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain)
throws IOException, ServletException {
final HttpServletRequest request = (HttpServletRequest) req;
final HttpServletResponse response = (HttpServletResponse) res;
final String authHeader = request.getHeader("authorization");
if ("OPTIONS".equals(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
chain.doFilter(request, response);
} else {
if (authHeader == null || !authHeader.startsWith("Bearer ")) {
AppError error = new AppError("0001","Invalid bearer token.");
request.setAttribute("error", error);
chain.doFilter(request, response);
}
final String token = authHeader.substring(7);
try {
final Claims claims = Jwts.parser().setSigningKey("secretkey").parseClaimsJws(token).getBody();
request.setAttribute("claims", claims);
} catch (final SignatureException e) {
AppError error = new AppError("0002","Invalid token signature.");
request.setAttribute("error", error);
chain.doFilter(request, response);
}
catch (final ExpiredJwtException e) {
AppError error = new AppError("0003","Expired token.");
request.setAttribute("error", error);
chain.doFilter(request, response);
}
catch (final MalformedJwtException e) {
AppError error = new AppError("0004","Malformed token.");
request.setAttribute("error", error);
chain.doFilter(request, response);
//return ;
}
chain.doFilter(req, res);
}
}
et voici l'exception je reçois:
java.lang.IllegalStateException: Impossible d'appeler sendError() après que la réponse a été validée sur org.apache.catalina.connector.ResponseFacade.sendError (ResponseFacade.java:472) ~ [tomcat-embed-core-8.5.16.jar: 8.5.16 ] à org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleHttpMessageNotReadable (DefaultHandlerExceptionResolver.java:386) ~ [printemps-webmvc-4.3.10.RELEASE.jar: 4.3.10.RELEASE] à .. . .... à com.inconso.LoginFilter.doFilter (LoginFilter.java:67) [classes /: na]