Для этого вам нужно написать Interceptor
. Он будет использоваться в следующих ситуациях:
Перед отправкой запроса в контроллер
Перед отправкой ответа клиенту
Перед написанием любого Interceptor
он должен реализовать интерфейс HandlerInterceptor
. Поддерживаются три метода Interceptor
:
preHandle()
метод - выполнение операций перед отправкой запроса на controller
. Этот метод должен возвращать true, чтобы вернуть ответ клиенту. postHandle()
метод - используется для выполнения операций перед отправкой ответа клиенту. afterCompletion()
метод - используется выполнять операции после завершения запроса и ответа.
Код:
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(
HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String pathVariablesMap = request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
//From this pathVariablesMap extract UserId and match with a loggedinUserId
}
@Override
public void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler,
) throws Exception {}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception exception) throws Exception {}
}
Используя InterceptorRegistry
, вы можете зарегистрировать Interceptors
, как показано ниже:
@Component
public class MyRegistoryConfig extends WebMvcConfigurer{
@Autowired
MyInterceptor myInterceptor ;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor );
}
}
Для получения дополнительной информации перейдите по этой ссылке Перехватчики
РЕДАКТИРОВАТЬ: Как @ Rite sh предложил добавить эту точку.