Post

Epoch 14 – Filters

Middlewre check login in your Maven JSP/Servlet project.

Epoch 14 – Filters

1. A Filter is a Java class that can:

  • Intercept requests before they reach a servlet or JSP.
  • Modify requests/responses (e.g., authentication, logging, compression).
  • Decide whether to forward, block, or modify the request.

It is useful for cross-cutting concerns (authentication, logging, encoding, etc.) that should not be mixed with business logic.

Update template filter by Jakarta

  • In Narbar (Menu bar) => Tools => Templates

  • Web/Filter => Open in Editor

  • Replace “javax” to “jakarta”

3. Create filters

  • Step 1: Create package “Filters”
  • Step 2: Right mouse in Filters packages => New/Filter
    • Fill Class Name (AuthFilter) and Package (Filters)

  • Step 3: Check add … web.xml.

  • Update Filter/AuthFilter.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class AuthFilter implements Filter {

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

	HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        
        // Option 1: Login URL
        String loginURI = req.getContextPath() + "/login";
        boolean loginRequest = req.getRequestURI().toLowerCase().contains(loginURI.toLowerCase());
        
        // Option 2: Resources
        boolean resourceRequest = req.getRequestURI().startsWith(req.getContextPath() + "/assets");
        
        // Option 3: Session/Cookie
        String key = "username";
        boolean loggedIn = false;
        Cookie[] cookies = req.getCookies();
        if (cookies != null) {
            for (Cookie c : cookies) {
                if (key.equals(c.getName())) {
                    loggedIn = true;
                    request.setAttribute(key, c.getValue());
                    break;
                }
            }
        }
        
        if (loggedIn || loginRequest || resourceRequest) {
            chain.doFilter(request, response); 
        } else {
            res.sendRedirect(loginURI); 
        }
    }
}
  • Remove check cookie in HomeServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
public class HomeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        ProductDAO productDAO = new ProductDAO();
        List<Product> products = productDAO.GetAllProducts();
        request.setAttribute("products", products);
        
        request.setAttribute("contentPage", "home_content.jsp");
        request.getRequestDispatcher("/views/pages/home.jsp").forward(request,response);
    } 
}

Note: Has 3 option can’t pass via filter

  • Option 1: login page
  • Option 2: Public resource such as “assets/*”
  • Option 3: Has login

Source Demo

This post is licensed under CC BY 4.0 by the author.