ユーザーが接続されているかどうかを確認するためにフィルターを使用しています(トークンは有効です)。トークンが有効でない場合はエラーの詳細を「エラー」という属性を設定しました。例外は、私が取得され、ここでスプリングブートコントローラーの問題
@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);
}
}
と::
java.lang.IllegalStateExceptionをここ
@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"; }
そして、私のコントローラが私のフィルタです。 応答がコミットされた後でsendError()を呼び出せません at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:472) 〜[tomcat-embed-core-8.5.16.jar:8.5.16 ] at org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleHttpMessageNotReadable(DefaultHandlerExceptionResolver.java:386) 〜[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE] at ..この条件が真である
else
ブロック内