Java web filter与代理模式案列 和监听器

  一.登录 

@WebFilter("/*")
public class Filterlogin implements Filter {

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;
        String uri = request.getRequestURI();
        if (uri.contains("/login.jsp") || uri.contains("/loginServlet") || uri.contains("/css/") || uri.contains("/js/") || uri.contains("/fonts/") || uri.contains("/checkCodeServlet")  ){
            chain.doFilter(req,resp);
        }else {
            //判断有没有session'
            Object user = request.getSession().getAttribute("user");
            if (user!=null&& user !=""){
                chain.doFilter(req,resp);
            }else {
                request.setAttribute("login_msg","您还没有登录!");
                request.getRequestDispatcher("login.jsp").forward(request,resp);
            }
        }
    }

     1.因为 ServletRequest 没有 getRequestURI方法  所以需要强转为 HttpServletRequest   对象 

      2.包含登录操作 css   js  的请求跳过过滤   然后判断有没有session  

二.过滤敏感词汇

   1.代理设计模式   类似python  装饰器 ,给方法 加一些功能

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain){}

   原来的 req中的   getparams  方法没有过滤的功能  所以可以用 代理模式对它加强

    1.ServletRequest   proxy_req =  Proxy.newProxyInstance (

                req.getClass().getClassLoader(),     req.getClass().getInterfaces(),    new InvocationHandler()  { 匿名内部类重写}

固定的     普通对象的类加载器                            普通对象的接口                               实现接口

     2.重写方法: 

       list  集合中存放的是 敏感词汇

        @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                if(method.getName().equals("getParameter")){   增强getParameter方法判断是不是
             
                    String value = (String) method.invoke(req,args);  增强返回值
                    if(value != null){
                        for (String str : list) { 
                            if(value.contains(str)){    包含敏感就替换  返回替换后的
                                value = value.replaceAll(str,"***");  
                            }}}
                    return  value;
                } 
                return method.invoke(req,args);}    如果不是这个方法  就照样执行

  参数  method  就是req对象中的所有方法      args 就是req方法中的所有参数        

  method.invoke(req, args)   执行真正的原来的方法  req 为方法的对象

 Listener:监听器

    1.概念:web的三大组件之一
        1.事件监听机制:     1.事件:一件事情        2.事件源 :事件发生的地方     3.监听器 :一个对象
                                      4.注册监听:将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,执行监听器代码

    2.ServletContextListener:     监听ServletContext对象的创建和销毁
        * 方法:1. void contextDestroyed(ServletContextEvent sce) :  ServletContext对象被销毁之前会调用该方法
                     2.  void contextInitialized(ServletContextEvent sce) :   ServletContext对象创建后会调用该方法
    3.步骤:
            1. 定义一个类,实现ServletContextListener接口          2. 复写方法       
            3. 配置          1. web.xml                      2. 注解: @WebListener   两个都要

@WebListener
public class ContextLoaderListener implements ServletContextListener {
    @Override   在服务器启动后自动调用
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        加载资源文件
        1.获取ServletContext对象
        ServletContext servletContext = servletContextEvent.getServletContext();

        2.加载资源文件
        String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation");

        3.获取真实路径
        String realPath = servletContext.getRealPath(contextConfigLocation);

        4.加载进内存
        try{
            FileInputStream fis = new FileInputStream(realPath);
            System.out.println(fis);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("ServletContext对象被创建了。。。");
    }

    @Override     在服务器关闭后,ServletContext对象被销毁。当服务器正常关闭后该方法被调用
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext对象被销毁了。。。");
    }}


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整全套资源下载地址:https://download.csdn.net/download/qq_27595745/70761177 【完整课程表】 完整版Java web开发教程PPT课件 Java开发进阶教程 第01章 JavaScript简介以及基本语法(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第04章 自定义web服务器(共14页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第06章 SERVLET(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第07章 JSP语法及运行过程(共13页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第08章 JSP内置对象(共22页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第09章 jstl、el、java bean(共18页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第12章 自定义mvc框架(共11页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第13章 spring ioc aop(共18页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第14章 spring mvc介绍,原理以及搭建(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第15章 spring mvc核心对象拦截器(共26页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第17章 自定义orm框架(共11页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第18章 mybatis框架的搭建以及应用(共13页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第19章 mybatis高级应用(共21页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第20章 数据库连接池,缓存(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第22章 常用框架的介绍以及环境搭建(共16页).pptx JS课程例ebookHTML\网上书店需求文档.doc

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值