• 第三周作业


    1.关于用户授权的Filter例子

    • package com.drp.util.filter;import java.io.IOException;
      import javax.servlet.Filter;
      import javax.servlet.FilterChain;
      import javax.servlet.FilterConfig;
      import javax.servlet.ServletException;
      import javax.servlet.ServletRequest;
      import javax.servlet.ServletResponse;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import javax.servlet.http.HttpSession;
      public class AuthFilter implements Filter {
      public void destroy() {
      }
      public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
      FilterChain filterChain) throws IOException, ServletException {
      /** 1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括
      * 表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过
      * 滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
      */
      HttpServletRequest request = (HttpServletRequest)servletRequest;
      /** 如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中
      * 无法得到的方法,就要把此request对象构造成HttpServletRequest
      */
      HttpServletResponse response = (HttpServletResponse)servletResponse;
      String currentURL = request.getRequestURI(); //取得根目录所对应的绝对路径:
      String targetURL = currentURL.substring(currentURL.indexOf("/", 1),
      currentURL.length()); //截取到当前文件名用于比较
      HttpSession session = request.getSession(false);
      if (!"/login.jsp".equals(targetURL)) {
      //判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环
      if (session == null || session.getAttribute("user") == null) {
      //*用户登录以后需手动添加session
      System.out.println("request.getContextPath()=" + request.getContextPath());
      response.sendRedirect(request.getContextPath() + "/login.jsp");
      //如果session为空表示用户没有登录就重定向到login.jsp页面
      return;
      }
      }
      //加入filter链继续向下执行
      filterChain.doFilter(request, response);
      /** 调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作
      * 为它 的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另
      * 一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
      */
      }
      public void init(FilterConfig filterConfig) throws ServletException {
      }
      }

    • 然后在配置文件web.xml里添加: (请注意,过滤是在serlvet规范2.3版中初次引入的。因此,web.xml文件必须使用DTD的2.3以上版本。)

      <filter>
      <filter-name>AuthFilter</filter-name>
      <filter-class>com.drp.util.filter.AuthFilter</filter-class>
      </filter>
      <filter-mapping>
      <filter-name>AuthFilter</filter-name>
      <url-pattern>*.jsp</url-pattern>//表示对所有jsp文件有效
      </filter-mapping>

      这样用户没有登录的情况下就会转到登录页面。

    2.认识了解session

           Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。注意 会话状态仅在支持 cookie 的浏览器中保留。

          

            session的工作原理
    (1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
    (2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
    (3)当执行PHP脚本时,通过使用session_register()函数注册session变量。
    (4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
     
    3.异步处理
            异步处理就是按照不同步的程序处理问题。异步处理与同步处理是对立的,而产生他们的是多线程或者多进程。异步处理的好处就是提高设备使用率,从而在宏观上提升程序运行效率,但是弊端就是容易出现冲突操作和数据脏读。同步则刚好相反,同步是一种降低设备使用率,在宏观上降低了程序的运行效率,而且很多系统或者是运行环境在处理同步的时候为了维持同步的有效性也会付出许多格外的系统资源开支,对性能影响相当大。但是同步保证了程序运行的正确性与数据的完整性。
            异步处理实例:
    
    
    public void callURL(param1,param2,...){
        attackMethod();//发起攻击函数
    
        //启动获取关联告警信息的id和alertid线程
        ReheaserseThread thread = new ReheaserseThread(rehearseHome.getIpAddress(),rehearseHome.getId(),account);
                  Thread t1 = new Thread(thread);
                        t1.start(); 
    }
    
    //线程类                       
    public class ReheaserseThread implements Runnable {
            private Long id;
            private String ip;
            private String account;
    
            public ReheaserseThread(String ip,Long id,String account) {
                this.id = id;
                this.ip = ip;
                this.account = account;
            } 
    
            public void run() {
                getAlertListIdAndAlertId(ip,id,account);
            } 
        }
    
    
  • 相关阅读:
    Android 内存剖析 – 发现潜在问题
    Android内存泄漏问题(一)
    Android的事件处理机制详解(二)-----基于监听的事件处理机制
    Android的事件处理机制(一)------基于回调机制的事件处理
    OOA、OOD 和 OOP
    面向对象初识
    Python 2 和 Python 3 的区别
    软件开发规范
    语法分析和词法分析
    循环删除的坑
  • 原文地址:https://www.cnblogs.com/blueland/p/8650197.html
Copyright © 2020-2023  润新知