在基于SPRING的Web应用程序中跟踪请求URL的历史记录

时间:2014-06-06 09:58:43

标签: tomcat spring-mvc web-applications web multi-tenant

我正在开发一个个人项目,我接受请求的前置服务器验证它们,然后将请求传输到其他应用程序。

问题是,当我必须跟踪前一个流程时,我依赖于请求参数,因为请求会根据流程转移到不同的应用程序。

我提出了一个想法,创建一个API来维护请求URL的堆栈和参数,并使其可供所有应用程序使用。

问题:由于所有请求都通过前置服务器映射到相应的应用程序,因此考虑添加包含先前请求字符串的标头以及应用程序中的API将读取标头以了解上一个流程。

但是标题的大小是有限的,因此我不能采用这种方法,如果我不能将COOKIES用于同一个过程,

问题

是否有任何API可以跟踪STACK中的请求?如果没有,请告诉我一个可行的解决方案

2 个答案:

答案 0 :(得分:0)

听起来像过滤器的绝佳机会!

@Component
public class RequestTrackingFilter extends GenericFilterBean {

    @Override
    public void doFilter(
        ServletRequest request,
        ServletResponse response,
        FilterChain chain) {

        // Record the context this request was fired on.
        myDatabase.save(request.getServletContext());

        // Go along your merry way.
        chain.doFilter(request, response);
    }
}

我不知道getServletContext()方法是否适合您,但该请求对象知道它被解雇的URL很多。

可以将此过滤器配置为在部署描述符中使用,或者如果您有对过滤器链进行后处理的内容(如Spring Security),则可以将其固定在过滤器链的末尾。只需通过正确设置映射,确保所有上下文的请求都被过滤掉。

答案 1 :(得分:0)

How about this:

a) Create a Map where key will be the uri and value will be another Map. In the another Map the key will be request parameter name and value will be its value as below:

Map<String, Map<String, Object>> uriRequestInfo = new HashMap<String, Map<String, Object>>();

For each uri do as below:

Map<String, Object> uriRequestParams = uriRequestInfo.get(uri);
if(uriRequestInfo == null) {
   uriRequestParams = new HashMap<String, Object>();
}

// Consider you have two parameters and values in request uri /pqr/xyz/abc.do as ?name=ganesh&age=12

uriRequestParams.put("name", "ganesh");