• 使用filter拦截器判断会话是否丢失


    拦截器写法很简单:implements Filter
    实现:public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

    实现:public void init(FilterConfig filterConfig) throws ServletException

    还可以根据业务需要写多个拦截器

    package quality.util;
    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.RequestDispatcher;
    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;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    public  class LoginCheckFilter implements Filter
    {
     protected Log log=LogFactory.getLog(getClass());
     private  String loginPage="";
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
     {
      HttpServletRequest httpServletRequest=(HttpServletRequest)request;
      log.debug("用户请求URL:"+httpServletRequest.getServletPath()+"?"+httpServletRequest.getQueryString());
      log.debug("用户请求参数:"+httpServletRequest.getParameterMap());
      String url=httpServletRequest.getServletPath();
      if(url.indexOf("login.jsp")>=0 ||url.indexOf("login.action")>=0)
      { 
       chain.doFilter(request, response);
      }
      else
      {
       HttpSession session = httpServletRequest.getSession();
       //判断用户session是否过期或是否登录
             if (session!= null&&session.getAttribute("operatorId")!=null)
             {
              chain.doFilter(request, response);
             }
             else
             {
              //转向登录页面
              RequestDispatcher rd=request.getRequestDispatcher(loginPage);
              rd.forward(request, response);
             }
      }
     }
     public void init(FilterConfig filterConfig) throws ServletException
     {
      this.loginPage=filterConfig.getInitParameter("loginPage");
     }
     public void destroy() {}

    }

    web.xml中配置:

    <filter>
      <filter-name>LoginCheckFilter</filter-name>
      <filter-class>
       quality.util.LoginCheckFilter
      </filter-class>
      <init-param>
       <param-name>loginPage</param-name>
       <param-value>/login.jsp</param-value>
      </init-param>
     </filter>
     <filter-mapping>
      <filter-name>LoginCheckFilter</filter-name>
      <url-pattern>*.jsp</url-pattern>
     </filter-mapping>
     <filter-mapping>
      <filter-name>LoginCheckFilter</filter-name>
      <url-pattern>*.action</url-pattern>
     </filter-mapping>

    .NET中用HttpHandel机制实现同样的需求:

    <httpHandlers>
               
    <add verb="GET" path="*.aspx" type="AspNetForums.Components.HttpHandler.AvatarHttpHandler, AspNetForums.Components" />
    </httpHandlers>

    HttpHandlers 是对文件访问句柄进行控制的也就是说,假如我要访问某个网页时,在这之前我要处理某些事情时。

    Model是对事件句柄访问进行控制。在页面创建,请求的前后要处理某些事情。

    *.aspx 也就是说所有的aspx文件访问都会触发

    Path就是对应的文件路径。但这个文件不一定是必须存在的,只要对

    文件名进行了请求就会立刻转到HttpHandlers对象类进行处理,而不会再转到页面上进行处理, 也就相当于那个页面是一个虚拟的.

    Type 是要处理这些事情要转到那个类去处理,第一个分号前是处理的类最好加上命名空间,第二个是类的命名空间也就是依赖项.

     

    另外,使用这种机制还可以捕捉“盗链”情况,例如在IIS没有做*.rar到asp.net映射之前,这个请求根本不经过asp.net机制的处理,映射后,就可以通过handler拦截到

  • 相关阅读:
    打开fiddler之后,python写的爬虫无法正常运行
    Fiddler抓包https失败踩坑
    python 报错 name is not defined
    HttpWebRequest爬虫问题汇总
    Navicat Premium 16 for Mac 最新版
    CentOS升级polkit版本,解决 Linux Polkit 存在权限提升的漏洞 (CVE20214034)
    Nginx Proxy Manager
    docker tar.gz
    C# HttpClientHandle
    nginx joplin
  • 原文地址:https://www.cnblogs.com/willpower/p/1257527.html
Copyright © 2020-2023  润新知