WHAT'S NEW?
Loading...

Membuat Servlet Filter dan Servlet Listener Part 1

Assalamu'alaikum ...

Hallo, lama tak berjumpa. postingan kali ini saya masih akan mengulas yang berhubungan dengan servlet.

oke, langsung aja kita akan membuat :
1. Servlet Filter Login
buat project baru di netbean kamu dengan memlih web application, beri nama nama filterlogin. setelah buat project baru, buka file index.html lalu masukkan kode berikut :

    
<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta charset="UTF-8"> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    </head>
    <body>
         <form action="LoginServlet" method="post"> 
             Username: <input type="text" name="user"> 
             <br> 
             Password: <input type="password" name="pwd">
             <br>
             <input type="submit" value="Login"> 
         </form> 
    </body>
</html>
kemudian buat file servlet baru dengan nama LoginServlet.java
 
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException;
import javax.servlet.http.Cookie; 
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; 

/**
 *
 * @author fitri
 */
public class LoginServlet extends HttpServlet {
     private static final long serialVersionUID = 1L;
     private final String userID = "admin";
     private final String password = "123"; 

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here. You may use following sample code. */
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet LoginServlet</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet LoginServlet at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
       // processRequest(request, response);
        String user = request.getParameter("user");
        String pwd = request.getParameter("pwd");
        
        if (userID.equals(user) && password.equals(pwd)) { 
        HttpSession session = request.getSession();
        session.setAttribute("user", "Pankaj");
        //setting session to expiry in 30 mins 88 
        session.setMaxInactiveInterval(30 * 60);
        Cookie userName = new Cookie("user", user); 
        userName.setMaxAge(30 * 60);
        response.addCookie(userName);
        response.sendRedirect("LoginSuccess.jsp");
        } else {
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.html");
            PrintWriter out = response.getWriter();
            out.println("<font color=red>Either user name or password is wrong.</font>"); 
            rd.include(request, response);
        } 
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
setelah membuat servlet untuk login, kita akan membuat servlet untuk logout dengan nama file LogoutServlet.java. berikut kodenya :
 
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; 

/**
 *
 * @author fitri
 */
public class LogoutServlet extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here. You may use following sample code. */
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet LogoutServlet</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet LogoutServlet at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
         Cookie[] cookies = request.getCookies();
         if (cookies != null) {
             for (Cookie cookie : cookies) {
                 if (cookie.getName().equals("JSESSIONID")) {
                     System.out.println("JSESSIONID=" + cookie.getValue());
                     break;
                 }
             }
         }
         //invalidate the session if exists 
         HttpSession session = request.getSession(false);
         System.out.println("User=" + session.getAttribute("user"));
         if (session != null) { 
             session.invalidate();
         } 
         response.sendRedirect("index.html"); 
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

lanjutkan dengan buat file RequestLoggingFilter.java
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Enumeration;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

/**
 *
 * @author fitri
 */

public class RequestLoggingFilter implements Filter {

    private static final boolean debug = true;

    // The filter configuration object we are associated with. If
    // this value is null, this filter instance is not currently
    // configured.
    private FilterConfig filterConfig = null;
    //private ServletContext context;

    public RequestLoggingFilter() {
    }

    private void doBeforeProcessing(ServletRequest request, ServletResponse response)
    throws IOException, ServletException {
        if (debug) {
            log("RequestLoggingFilter:DoBeforeProcessing");
        }

        HttpServletRequest req = (HttpServletRequest) request;
        Enumeration params = req.getParameterNames();
        while (params.hasMoreElements()) {
        String name = params.nextElement();
        String value = request.getParameter(name);
        log(req.getRemoteAddr() + "::Request Params::{" + name + "=" + value + "}");

    }

    Cookie[] cookies = req.getCookies();
    if (cookies != null) {
        for (Cookie cookie : cookies) {
            log(req.getRemoteAddr() + "::Cookie::{" + cookie.getName() + "," + cookie.getValue() + "}");
        }
    }
    
    }

    private void doAfterProcessing(ServletRequest request, ServletResponse response)
    throws IOException, ServletException {
        if (debug) {
            log("RequestLoggingFilter:DoAfterProcessing");
        }
    }

    /**
    *
    * @param request The servlet request we are processing
    * @param response The servlet response we are creating
    * @param chain The filter chain we are processing
    *
    * @exception IOException if an input/output error occurs
    
    * @exception ServletException if a servlet error occurs
    */
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {

        if (debug) {
            log("RequestLoggingFilter:doFilter()");
        }

        doBeforeProcessing(request, response);

        Throwable problem = null;
        try {
            chain.doFilter(request, response);
        } catch (Throwable t) {
        // If an exception is thrown somewhere down the filter chain,
        // we still want to execute our after processing, and then
        // rethrow the problem after that.
            problem = t;
            t.printStackTrace();
        }

        doAfterProcessing(request, response);

        // If there was a problem, we want to rethrow it if it is
        // a known type, otherwise log it.
        if (problem != null) {
            if (problem instanceof ServletException) {
                throw (ServletException) problem;
            }
            if (problem instanceof IOException) {
                throw (IOException) problem;
            }
            sendProcessingError(problem, response);
        }
    }

    /**
    * Return the filter configuration object for this filter.
    */
    public FilterConfig getFilterConfig() {
        return (this.filterConfig);
    }

    /**
    * Set the filter configuration object for this filter.
    *
    * @param filterConfig The filter configuration object
    */
    public void setFilterConfig(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
    }

    /**
    * Destroy method for this filter
    */
    public void destroy() {
    }

    /**
    * Init method for this filter
    */

    public void init(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
        if (filterConfig != null) {
            if (debug) {
                log("RequestLoggingFilter:Initializing filter");
            }
        }
    }

    /**
    * Return a String representation of this object.
    */
    @Override
    public String toString() {
        if (filterConfig == null) {
            return ("RequestLoggingFilter()");
        }
        StringBuffer sb = new StringBuffer("RequestLoggingFilter(");
        sb.append(filterConfig);
        sb.append(")");
        return (sb.toString());
    }

    private void sendProcessingError(Throwable t, ServletResponse response) {
        String stackTrace = getStackTrace(t);

        if (stackTrace != null && !stackTrace.equals("")) {
            try {
                response.setContentType("text/html");
                PrintStream ps = new PrintStream(response.getOutputStream());
                PrintWriter pw = new PrintWriter(ps);
                pw.print("\n\nError\n\n\n");

                // PENDING! Localize this for next official release
                pw.print("

The resource did not process correctly

\n
\n");
                pw.print(stackTrace);
                pw.print("
\n"); //NOI18N pw.close(); ps.close(); response.getOutputStream().close(); } catch (Exception ex) { } } else { try { PrintStream ps = new PrintStream(response.getOutputStream()); t.printStackTrace(ps); ps.close(); response.getOutputStream().close(); } catch (Exception ex) { } } } public static String getStackTrace(Throwable t) { String stackTrace = null; try { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); t.printStackTrace(pw); pw.close(); sw.close(); stackTrace = sw.getBuffer().toString(); } catch (Exception ex) { } return stackTrace; } public void log(String msg) { filterConfig.getServletContext().log(msg); } }
selanjutnya buat file servlet AuthenticationFilter.java
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author fitri
 */
public class AuthenticationFilter extends HttpServlet {

    private static final boolean debug = true; 
    
    // The filter configuration object we are associated with.  If 
    // this value is null, this filter instance is not currently 
    // configured. 
    private FilterConfig filterConfig = null; 

    public AuthenticationFilter() {
    } 
    
    private void doBeforeProcessing(ServletRequest request, ServletResponse response)
        throws IOException, ServletException { 
        if (debug) { 
           log("AuthenticationFilter:DoBeforeProcessing"); 
        }
        
    }
    
    private void doAfterProcessing(ServletRequest request, ServletResponse response) 
        throws IOException, ServletException { 
        if (debug) { 
            log("AuthenticationFilter:DoAfterProcessing"); 
         }
        
       
    } 
    
    /**
     * Processes requests for both HTTP GET and POST
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
     public void doFilter(ServletRequest request, ServletResponse response, 
         FilterChain chain)
         throws IOException, ServletException { 
         
         if (debug) { 
            log("AuthenticationFilter:doFilter()");
         } 

        doBeforeProcessing(request, response);
        
        Throwable problem = null; 
        try {  
            HttpServletRequest req = (HttpServletRequest) request;
            HttpServletResponse res = (HttpServletResponse) response;
            
            String uri = req.getRequestURI();
            log("Requested Resource::" + uri);
            
            HttpSession session = req.getSession(false); 
                if (session == null && !(uri.endsWith("html") || uri.endsWith("LoginServlet"))) {
                    log("Unauthorized access request");
               
            res.sendRedirect("index.html");
                }else{ 
            // pass the request along the filter chain
                 chain.doFilter(request, response); 
                } 
       } catch (Throwable t) { 
        // If an exception is thrown somewhere down the filter chain, 
        // we still want to execute our after processing, and then 
        // rethrow the problem after that. 
            problem = t;
            t.printStackTrace(); 
        } 

        doAfterProcessing(request, response); 

        // If there was a problem, we want to rethrow it if it is 
        // a known type, otherwise log it. 
        if (problem != null) { 
            if (problem instanceof ServletException) {
            throw (ServletException) problem;
            } 
            if (problem instanceof IOException) { 
                throw (IOException) problem; 
            } 
            sendProcessingError(problem, response); 
         } 
        } 
 /** 
 * Return the filter configuration object for this filter. 
 */ 
     public FilterConfig getFilterConfig() { 
         return (this.filterConfig); 
        } 
        /** 
        * Set the filter configuration object for this filter. 
        * 
        * @param filterConfig The filter configuration object 
        */ 

        public void setFilterConfig(FilterConfig filterConfig) { 
        this.filterConfig = filterConfig; 
        } 
        /** 
        * Destroy method for this filter 
        */ 

         public void destroy() { 
        } 
        /** 
        * Init method for this filter
        */ 
        public void init(FilterConfig filterConfig) { 
        this.filterConfig = filterConfig;
        if (filterConfig != null) {
                if (debug) { 
                        log("AuthenticationFilter:Initializing filter");
                }
        } 
        } 
        /** 
        * Return a String representation of this object. 
        */ 

        @Override
        public String toString() { 
            if (filterConfig == null) { 
                return ("AuthenticationFilter()"); 
            }
            StringBuffer sb = new StringBuffer("AuthenticationFilter("); 
            sb.append(filterConfig); 
            sb.append(")"); 
            return (sb.toString());
        } 

        private void sendProcessingError(Throwable t, ServletResponse response) {
            String stackTrace = getStackTrace(t); 
            if (stackTrace != null && !stackTrace.equals("")) { 
                try {
                    response.setContentType("text/html"); 
                    PrintStream ps = new PrintStream(response.getOutputStream());
                    PrintWriter pw = new PrintWriter(ps);
                    pw.print("\n\nError\n\n\n"); 
                    //NOI18N 

                    // PENDING! Localize this for next official release 
                    pw.print("

The resource did not process correctly

\n
\n"); 
                    pw.print(stackTrace); 
                    pw.print("
\n"); //NOI18N pw.close(); ps.close(); response.getOutputStream().close(); } catch (Exception ex) { } } else { try { PrintStream ps = new PrintStream(response.getOutputStream()); t.printStackTrace(ps); ps.close(); response.getOutputStream().close(); } catch (Exception ex) { } } } public static String getStackTrace(Throwable t) { String stackTrace = null; try { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); t.printStackTrace(pw); pw.close(); sw.close(); stackTrace = sw.getBuffer().toString(); } catch (Exception ex) { } return stackTrace; } public void log(String msg) { filterConfig.getServletContext().log(msg); } }
semua kode sudah selesai, langkah terakhir ubah di file web.xml menjadi seperti di bawah ini


    
RequestLoggingFilter
RequestLoggingFilter


AuthenticationFilter
AuthenticationFilter


RequestLoggingFilter
/*
REQUEST


AuthenticationFilter
/*


LoginServlet
LoginServlet


LogoutServlet
LogoutServlet


LoginServlet
/LoginServlet


LogoutServlet
/LogoutServlet



30

    

Setelah selesai semua, jalankan aplikasi Anda. Selamat Bereksplorasi :) tunggu di part 2 ya .. Wassalamualaikum wr. wb

0 komentar:

Posting Komentar