⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loginfilter.java

📁 在sun实训时写的
💻 JAVA
字号:
/* * LoginFilter.java * * */package com.dvd.web;import com.dvd.model.DVDLibrary;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import sun.misc.BASE64Decoder;/** * * @author * @version */public class LoginFilter implements Filter {        // 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 LoginFilter() {    }        private void doBeforeProcessing(ServletRequest request, ServletResponse response)    throws IOException, ServletException {        if (debug) log("LoginFilter:DoBeforeProcessing");        //        // Write code here to process the request and/or response before        // the rest of the filter chain is invoked.        //                //        // For example, a logging filter might log items on the request object,        // such as the parameters.        //        /*         for (Enumeration en = request.getParameterNames(); en.hasMoreElements(); ) {             String name = (String)en.nextElement();             String values[] = request.getParameterValues(name);             int n = values.length;             StringBuffer buf = new StringBuffer();             buf.append(name);             buf.append("=");             for(int i=0; i < n; i++) {                 buf.append(values[i]);                 if (i < n-1)                     buf.append(",");             }             log(buf.toString());         }         */            }        private void doAfterProcessing(ServletRequest request, ServletResponse response)    throws IOException, ServletException {        if (debug) log("LoginFilter:DoAfterProcessing");        //        // Write code here to process the request and/or response after        // the rest of the filter chain is invoked.        //                //        // For example, a logging filter might log the attributes on the        // request object after the request has been processed.        //        /*        for (Enumeration en = request.getAttributeNames(); en.hasMoreElements(); ) {            String name = (String)en.nextElement();            Object value = request.getAttribute(name);            log("attribute: " + name + "=" + value.toString());                 }         */        //                //        // For example, a filter might append something to the response.        //        /*        PrintWriter respOut = new PrintWriter(response.getWriter());        respOut.println("<P><B>This has been appended by an intrusive filter.</B>");         */    }        /**     *     * @param request The servlet request we are processing     * @param result 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("LoginFilter:doFilter()");                HttpServletRequest request = (HttpServletRequest) _request;        HttpServletResponse response = (HttpServletResponse) _response;        ServletContext context = filterConfig.getServletContext();                HttpSession session = request.getSession();        DVDLibrary library = (DVDLibrary) session.getAttribute("library");                doBeforeProcessing(request, response);                Throwable problem = null;                if ( library != 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();            }        } else {            // Check if browser is sending the user's credentials            String credentials = request.getHeader("Authorization");            if ( credentials != null ) {                                // Retrieve the credentials from the header string                credentials = credentials.substring(6);                context.log("Credentials = " + credentials);                                // Decode the username:password string                BASE64Decoder decoder = new BASE64Decoder();                byte[] data = decoder.decodeBuffer(credentials);                String pair = new String(data);                // Retrieve the username portion of the credentials                String username = pair.substring(0, pair.indexOf(':'));                context.log("Username = " + username);                // Use the username to create a user-specific                library = new DVDLibrary(username);                session.setAttribute("library", library);                                // And then proceed with the request                                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();                }                            } else {                                // Send the login challenge                context.log("Sending the challenge.");                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);                response.setHeader("WWW-Authenticate", "Basic realm=dvdLogin");            }        }    }        /**     * 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("LoginFilter:Initializing filter");            }        }    }        /**     * Return a String representation of this object.     */    public String toString() {                if (filterConfig == null) return ("LoginFilter()");        StringBuffer sb = new StringBuffer("LoginFilter(");        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("<html>\n<head>\n<title>Error</title>\n</head>\n<body>\n"); //NOI18N                                // PENDING! Localize this for next official release                pw.print("<h1>The resource did not process correctly</h1>\n<pre>\n");                pw.print(stackTrace);                pw.print("</pre></body>\n</html>"); //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);    }        private static final boolean debug = true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -