动态代理--增强方法,Filter--案例,登陆验证--分析,代码实现过滤敏感词汇--分析,基本实现步骤,实现

    科技2022-08-05  101

    黑马程序员

    Filter–案例1–登陆验证–分析

    Filter–案例1–登陆验证–代码实现

    准备工作

    package cn.itcast.web.servlet; import cn.itcast.web.domain.User; import org.apache.commons.beanutils.BeanUtils; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.Map; @WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (request.getParameter("username") == null || request.getParameter("password") == null) { request.setAttribute("msg", "请将信息填写完整"); request.getRequestDispatcher("/login.jsp").forward(request, response); return; } Map<String, String[]> parameterMap = request.getParameterMap(); User user = new User(); try { BeanUtils.populate(user, parameterMap); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } request.getSession().setAttribute("user",user); response.sendRedirect(request.getContextPath()+"/index.jsp"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } } package cn.itcast.web.filter; import com.sun.deploy.net.HttpRequest; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; @WebFilter(value = "/*",dispatcherTypes = DispatcherType.REQUEST) public class LoginFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; String requestURI = request.getRequestURI(); if (requestURI.contains("/login.jsp") || requestURI.contains("/LoginServlet")) { request.setAttribute("msg",""); chain.doFilter(request,resp); } else { if (request.getSession().getAttribute("user") != null) { chain.doFilter(request, resp); }else { request.setAttribute("msg","请先登陆"); request.getRequestDispatcher("/login.jsp").forward(request,resp); } } } public void init(FilterConfig config) throws ServletException { } }

    Filter–案例–过滤敏感词汇–分析

    Filter–案例–过滤敏感词汇–基本实现步骤

    动态代理–增强方法

    package cn.itcast.web.proxy; public interface SaleComputer { public String sale(double money); public void show(); } package cn.itcast.web.proxy; public class Lenovo implements SaleComputer { @Override public String sale(double money) { return "花了"+money+"买了一台电脑"; } @Override public void show(){ System.out.println("展示电脑。。。"); } } package cn.itcast.web.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ProxyTest { public static void main(String[] args) { Lenovo lenovo = new Lenovo(); SaleComputer o = (SaleComputer) Proxy.newProxyInstance(lenovo.getClass().getClassLoader(), lenovo.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("代理方法"+method.getName()+"被执行"); //System.out.println(method.getName() + "-->参数" + args[0]); if (method.getName().equals("sale")) { double money = (double) args[0]; Object invoke = method.invoke(lenovo, money); return invoke+"送电脑包"; }else { Object invoke = method.invoke(lenovo, args); return invoke; } } }); String sale = o.sale(8000d); System.out.println(sale); System.out.println("***********************"); o.show(); } }

    Filter–案例–过滤敏感词汇–实现

    读取txt文件乱码: BufferedReader read = new BufferedReader(new FileReader(new File(filename))); 解决办法: InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8"); BufferedReader read = new BufferedReader(isr);

    因为InputStreamReader和BufferedReader都继承自Reader,而BufferedReader的构造器又是Reader.

    package cn.itcast.web.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.List; @WebFilter("/*") public class SensitiveWordFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (method.getName().equals("getParameter")) { String invoke = (String) method.invoke(req, args); if (invoke != null) { for (String o : list) { if (invoke.contains(o)) { invoke = invoke.replaceAll(o, "**"); } } } return invoke; } return method.invoke(req, args); } }); chain.doFilter(request, resp); } private List<String> list = new ArrayList<String>(); public void init(FilterConfig config) throws ServletException { BufferedReader bufferedReader = null; try { String realPath = config.getServletContext().getRealPath("WEB-INF/classes/敏感词汇.txt"); //bufferedReader = new BufferedReader(new FileReader(realPath));//乱码 bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(realPath), "UTF-8")); String str = ""; while ((str = bufferedReader.readLine()) != null) { list.add(str); System.out.println(str); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

    Processed: 0.022, SQL: 8