1
2
3
4
5
6
7
8
9
10
11
12
13
14 package chapter7;
15
16 import java.io.IOException;
17 import java.security.Principal;
18
19 import javax.servlet.Filter;
20 import javax.servlet.FilterChain;
21 import javax.servlet.FilterConfig;
22 import javax.servlet.ServletException;
23 import javax.servlet.ServletRequest;
24 import javax.servlet.ServletResponse;
25 import javax.servlet.http.HttpServletRequest;
26 import javax.servlet.http.HttpSession;
27
28 import org.slf4j.MDC;
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 public class UserServletFilter implements Filter {
54
55 boolean userRegistered = false;
56
57 private final String userKey = "username";
58
59 public void destroy() {
60 }
61
62 public void doFilter(ServletRequest request, ServletResponse response,
63 FilterChain chain) throws IOException, ServletException {
64
65 HttpServletRequest req = (HttpServletRequest) request;
66 Principal principal = req.getUserPrincipal();
67
68
69
70 if (principal != null) {
71 String username = principal.getName();
72 registerUsername(username);
73 } else {
74 HttpSession session = req.getSession();
75 String username = (String)session.getAttribute(userKey);
76 registerUsername(username);
77 }
78
79 try {
80 chain.doFilter(request, response);
81 } finally {
82 if (userRegistered) {
83 MDC.remove(userKey);
84 }
85 }
86 }
87
88 public void init(FilterConfig arg0) throws ServletException {
89 }
90
91 private void registerUsername(String username) {
92 if (username != null && username.trim().length() > 0) {
93 MDC.put(userKey, username);
94 userRegistered = true;
95 }
96 }
97
98 }