View Javadoc
1   package common.http;
2   
3   import usecase.auth.CurrentUser;
4   
5   import javax.inject.Inject;
6   import javax.servlet.FilterChain;
7   import javax.servlet.ServletException;
8   import javax.servlet.annotation.WebFilter;
9   import javax.servlet.http.HttpFilter;
10  import javax.servlet.http.HttpServletRequest;
11  import javax.servlet.http.HttpServletResponse;
12  import java.io.IOException;
13  import java.net.URI;
14  import java.net.URISyntaxException;
15  
16  @WebFilter("*")
17  class AliasFilter extends HttpFilter {
18      @Inject CurrentUser currentUser;
19  
20      @Override
21      protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException {
22          String requri;
23          try {
24              requri = new URI(req.getRequestURI())
25                      .normalize() //rimuove slash multipli e simili
26                      .toString()
27                      .substring(req.getContextPath().length() +1 );
28          } catch (URISyntaxException e) {
29              chain.doFilter(req, res);
30              return;
31          }
32          String[] splits = requri.split("/+");
33          switch(splits[0]){
34              case "me":{
35                  if(currentUser.isLoggedIn()){
36                      req.getRequestDispatcher("/user?name=" + currentUser.getUsername() + '&' + req.getQueryString())
37                              .forward(req, res);
38                      return;
39                  } else {
40                      res.sendError(HttpServletResponse.SC_UNAUTHORIZED);
41                      return;
42                  }
43              }
44              case "popular": {
45                  req.getRequestDispatcher("/home?view=popular" + '&' + req.getQueryString()).forward(req, res);
46                  return;
47              }
48              case "feed":{
49                  req.getRequestDispatcher("/home?view=following" + '&' + req.getQueryString()).forward(req, res);
50                  return;
51              }
52              case "s":{
53                  if(splits.length >= 2) {
54                      req.getRequestDispatcher("/s?section=" + splits[1] + '&' + req.getQueryString()).forward(req, res);
55                      return;
56                  }
57                  break;
58              }
59              case "u": {
60                  if (splits.length >= 2) {
61                      req.getRequestDispatcher("/user?name=" + splits[1] + '&' + req.getQueryString()).forward(req, res);
62                      return;
63                  }
64                  break;
65              }
66              case "post":{
67                  if(splits.length >= 2){
68                      req.getRequestDispatcher("/post?id=" + splits[1] + '&' + req.getQueryString()).forward(req, res);
69                      return;
70                  }
71                  break;
72              }
73          }
74  
75          chain.doFilter(req, res);
76      }
77  }