1 package org.varienaja.util;
2
3 import java.io.IOException;
4 import java.util.HashMap;
5 import java.util.Map;
6 import java.util.Map.Entry;
7
8 import javax.servlet.FilterChain;
9 import javax.servlet.ServletException;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12
13 import org.springframework.orm.hibernate3.support.OpenSessionInViewFilter;
14
15
16
17
18
19
20 public class SelectiveOpenSessionInViewFilter extends OpenSessionInViewFilter {
21 private static final String KEYVALUELIST = "keyvaluelist";
22 private Map<String,String> _filterMap;
23
24
25
26
27
28
29 public SelectiveOpenSessionInViewFilter() {
30 addRequiredProperty(KEYVALUELIST);
31 _filterMap = new HashMap<String,String>();
32 }
33
34
35
36
37
38
39
40 protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
41
42
43
44
45
46
47
48
49
50 request.setCharacterEncoding("UTF-8");
51
52
53 boolean matched = false;
54 for (Entry<String,String> entry : _filterMap.entrySet()) {
55 String values = request.getParameter(entry.getKey());
56 if (entry.getValue().equals(values)) {
57 matched = true;
58 break;
59 }
60 }
61
62 if (matched) {
63 filterChain.doFilter(request, response);
64 } else {
65 super.doFilterInternal(request, response, filterChain);
66 }
67 }
68
69
70
71
72
73 protected void initFilterBean() throws ServletException {
74 String cfg = getFilterConfig().getInitParameter(KEYVALUELIST);
75 for (String pair : cfg.split(";")) {
76 String[] items = pair.split("=");
77 if (items.length==2) {
78 _filterMap.put(items[0], items[1]);
79 } else {
80 throw new ServletException("Erroneous config of " + getClass().getName() + ", cannot interpret: " + cfg);
81 }
82 }
83 }
84 }