için özel durum işleme Simgelere dayalı kimlik doğrulamayı (yay güvenliği olmadan) uyguladım. Yani, GenericFilterBean'da, kontrol eder ve iddia eder. Spring GenericFilterBean
public class MyTokenFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws MyAuthException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
if (!"OPTIONS".equals(request.getMethod())) {
String authHeader = request.getHeader("Authorization");
if (authHeader == null || !authHeader.startsWith("Token ")) {
throw new MyAuthException("Authorization header needed"); // Should return custom http status response like 400
}
String token = authHeader.substring(6);
try {
claimToken(token);
} catch (Exception e) {
throw new MyAuthException("Invalid token."); // Should return custom http status response like 401
}
}
chain.doFilter(req, res);
}
}
Yani bu filtrede sonra her şey görünüyor. Fakat farklı Http Statüleri ile json ile yanıt göndermem gerekiyor. ResponseEntitiyExceptionHandler ile @ControllerAdvice'yi kullanabiliyorum. Böylece denetleyicilerimde istisnaları halledebilirim.
@ControllerAdvice
public class MyPrettyExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(MyAuthException.class)
@ResponseBody
public ResponseEntity<Object> handleCustomException(HttpServletRequest req, MyAuthException ex) {
Map<String, String> responseBody = new HashMap<>();
responseBody.put("error", "true");
responseBody.put("message", ex.getMessage());
return new ResponseEntity<Object>(responseBody, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
nasıl çalıştığını bilir ve hangi Filtre ve denetleyicileri ve bunların istisnaları (filtreler kontrolörleri önce kendi iş yapmak, böylece kontrolörler ile aynı kapsam değiliz) sipariş. Bu yüzden doğal olarak ControllerAdvice ile filtrenin istisnalarını ele alamıyorum.
Filtrelerdeki istisnaları işlemenin etkili yolu nedir (örnek yolum gibi)? Bana başka bir yol önerebilir misin?