博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个过滤器不仅解决了会话标识未更新同时还顺带解决了已解密的登录请求
阅读量:4345 次
发布时间:2019-06-07

本文共 4298 字,大约阅读时间需要 14 分钟。

废话不多说直接上代码,少点套路,多点真诚。

过滤器代码如下:

package com.filter;import java.io.IOException;import java.util.Enumeration;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;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.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** *  * 会话标识未更新  * */public class NewSessionFilter extends HttpServlet implements Filter {    /**     *      */    private static final long serialVersionUID = 831349987977760012L;    static ServletRequest request;    private String url;          private static final Logger logger = LoggerFactory.getLogger(NewSessionFilter.class);          public static final String NEW_SESSION_INDICATOR = "com.filter.NewSessionFilter";                 static HttpServletRequest request2 = (HttpServletRequest) request;        public static void newSession(){              HttpSession session = request2.getSession(true);              session.setAttribute(NEW_SESSION_INDICATOR, true);         }                  @Override          public void doFilter(ServletRequest request, ServletResponse response,                 FilterChain chain) throws IOException, ServletException           {              //System.out.println("NewSessionFilter doFilter");                            if (request instanceof HttpServletRequest) {                  HttpServletRequest httpRequest = (HttpServletRequest) request;                                    //取的url相对地址                  String url = httpRequest.getRequestURI();                   System.out.println(url);                    if (httpRequest.getSession() != null) {                      System.out.println("NewSessionFilter doFilter httpRequest.getSession().getId()"+ httpRequest.getSession().getId());                     //--------复制 session到临时变量                      HttpSession session = httpRequest.getSession();                      HashMap old = new HashMap();                      Enumeration keys = (Enumeration) session.getAttributeNames();                                            while (keys.hasMoreElements()){                          String key = (String) keys.nextElement();                          if (!NEW_SESSION_INDICATOR.equals(key)){                              old.put(key, session.getAttribute(key));                              session.removeAttribute(key);                          }                      }                                            if (httpRequest.getMethod().equals("POST") && httpRequest.getSession() != null                               && !httpRequest.getSession().isNew() && httpRequest.getRequestURI().endsWith(url)){                          session.invalidate();                          session=httpRequest.getSession(true);                          logger.debug("new Session:" + session.getId());                      }                                           //-----------------复制session                      for (Iterator it = old.entrySet().iterator(); it.hasNext();) {                          Map.Entry entry = (Entry) it.next();                          session.setAttribute((String) entry.getKey(), entry.getValue());                      }                  }              }                            chain.doFilter(request, response);             // System.out.println("NewSessionFilter doFilter end");         }                       @Override          public void destroy() {             // System.out.println("NewSessionFilter destory");          }                @Override          public void init(FilterConfig filterConfig) throws ServletException {             // System.out.println("NewSessionFilter init");              //System.out.println("NewSessionFilter init end");          }}

web.xml配置如下:

NewSessionFilter
com.filter.NewSessionFilter
NewSessionFilter
/*

 

转载于:https://www.cnblogs.com/Warmsunshine/p/5826588.html

你可能感兴趣的文章
MFC接收ShellExecute多个参数
查看>>
volatile和synchronized的区别
查看>>
RocketMQ介绍与云服务器安装
查看>>
并发量计算研究
查看>>
类中的静态函数和非静态函数的区别
查看>>
windows 下安装Apache
查看>>
Effective C++ 34 区分接口继承和实现继承
查看>>
Redis配置文件参数说明
查看>>
drf视图组件、认证组件
查看>>
Python_正则表达式
查看>>
[USACO08NOV]时间管理Time Management(排序,贪心)
查看>>
Hybrid App开发设计与实现
查看>>
Fedora14 mount出现错误时解决办法【亲测有效】
查看>>
实验四
查看>>
ruby实现生产者和消费者
查看>>
node.js 之 http 架设
查看>>
MongoDB 备份与还原
查看>>
Oracle启动与关闭数据库实例
查看>>
Spring day01
查看>>
hihocoder-1740-替换函数
查看>>