Subversion Repositories SmartDukaan

Rev

Rev 33761 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
33756 ranu 1
package com.spice.profitmandi.web.interceptor;
2
 
3
import org.apache.logging.log4j.LogManager;
4
import org.apache.logging.log4j.Logger;
5
import org.springframework.beans.factory.annotation.Autowired;
6
import org.springframework.cache.Cache;
7
import org.springframework.cache.CacheManager;
8
import org.springframework.stereotype.Component;
9
import org.springframework.web.servlet.HandlerInterceptor;
10
import org.springframework.web.servlet.ModelAndView;
11
 
12
import javax.servlet.http.HttpServletRequest;
13
import javax.servlet.http.HttpServletResponse;
14
 
15
@Component
16
public class PostInterceptor implements HandlerInterceptor {
17
 
18
    private static final Logger LOGGER = LogManager.getLogger(RoleInterceptor.class);
19
    @Autowired
20
    private CacheManager timeoutCacheManager;
21
 
22
    @Override
23
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception arg3)
24
            throws Exception {
25
    }
26
 
27
    @Override
28
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3)
29
            throws Exception {
30
        LOGGER.info("request is received after : " + request.getRequestURL().toString());
31
    }
32
 
33
    @Override
34
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
35
        //LOGGER.info("request is received in post interceptor before [{}] with method [{}]", request.getRequestURL().toString(), request.getMethod());
36
        if ("POST".equalsIgnoreCase(request.getMethod())) {
37
            String idempotencyKey = request.getHeader("IdempotencyKey");
38
            if (idempotencyKey == null || idempotencyKey.isEmpty()) {
39
                response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing idempotency token in header");
40
            }
41
 
42
            Cache cache = timeoutCacheManager.getCache("IdempotencyKey");
43
            if (cache != null) {
44
                if (cache.get(idempotencyKey) != null) {
45
                    response.setStatus(HttpServletResponse.SC_OK);
46
                    response.getWriter().write("Duplicate request. Idempotency Key already processed.");
47
                    return false;
48
                } else {
49
                    cache.put(idempotencyKey, "PROCESSED");
50
                    return true;
51
                }
52
            }
53
        }
54
        return true;
55
    }
56
 
57
 
58
}