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

黑马程序员

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);

因为InputStreamReaderBufferedReader都继承自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();
                }
            }
        }


    }

}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值