📄 loginfilter.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 + -