首页 > 代码库 > Web中的监听器【Listener】与过滤器【Filter】
Web中的监听器【Listener】与过滤器【Filter】
监听器实例:
package com.gwssi.listener;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class SessionListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent event) { HttpSession session = event.getSession(); SessionBean sessionBean = SessionFactory.getInstance().getSessionBean(); System.out.println("sessionCreated session: " + (session.getId())); System.out.println("sessionCreated accessCount: " + (sessionBean.getAccessCount())); // 访问次数 sessionBean.setAccessCount(sessionBean.getAccessCount() + 1); // 在线人数统计 sessionBean.getOnline().put(session.getId(), null); } @Override public void sessionDestroyed(HttpSessionEvent event) { HttpSession session = event.getSession(); SessionFactory factory = SessionFactory.getInstance(); SessionBean sessionBean = factory.getSessionBean(); System.out.println("sessionDestroyed session: " + (session.getId())); System.out.println("sessionDestroyed accessCount: " + (sessionBean.getAccessCount())); factory.removeLogin(session); }}
package com.gwssi.listener;import javax.servlet.http.HttpSession;public class SessionFactory { private SessionBean sessionBean = new SessionBean(); private static SessionFactory factory; private SessionFactory() { } static { factory = new SessionFactory(); } public synchronized static SessionFactory getInstance() { if (factory == null) { factory = new SessionFactory(); } return factory; } public void addLogin(HttpSession session, String user) { this.getSessionBean().getOnline().put(session.getId(), user); this.getSessionBean().getLogin().add(user); } public void removeLogin(HttpSession session) { this.getSessionBean().getLogin() .remove(this.getSessionBean().getOnline().get(session.getId())); this.getSessionBean().getOnline().remove(session.getId()); } public boolean isOnline(String user) { return this.getSessionBean().getLogin().contains(user); } public SessionBean getSessionBean() { return sessionBean; } public void setSessionBean(SessionBean sessionBean) { this.sessionBean = sessionBean; }}
package com.gwssi.listener;import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.Set;public class SessionBean { private Map<String, String> online = new HashMap<String, String>(); private int accessCount = 0; private Set<String> login = new HashSet<String>(); /** * * 返回当前系统在线人数 * * @return int */ public int getOnlineCount() { return this.online.size(); } /** * 返回当前系统登录人数 * * @return int */ public int getLoginCount() { return this.getLogin().size(); } public Map<String, String> getOnline() { return online; } public void setOnline(Map<String, String> online) { this.online = online; } public int getAccessCount() { return accessCount; } public void setAccessCount(int accessCount) { this.accessCount = accessCount; } public Set<String> getLogin() { return login; } public void setLogin(Set<String> login) { this.login = login; }}
在web.xml中增加
<session-config> <session-timeout>10</session-timeout> </session-config> <listener> <listener-class>com.gwssi.listener.SessionListener</listener-class> </listener>
在登录时
//添加进入SessionFactory,以供记录是否在线 SessionFactory.getInstance().addLogin(session, userInfo.getUserId());
页面调用:
import="com.oddel.listener.SessionFactory;
SessionFactory.getInstance().isOnline(userid)
返回true表示用户当前是在线的。
返回false表示用户当前是不在线的。
过滤器:
package com.gwssi.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;import cn.gwssi.csdb.fbk.util.StringUtil;public class SessionCheckFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; String userid = request.getParameter("userid");// System.out.println(request.getServletPath() + "===SessionCheckFilter====" + userid); if (StringUtil.isEmpty(userid) || "null".equals(userid)) { // 当请求中没有userid参数时,由后台进行判断 chain.doFilter(req, res); } else { HttpSession session = request.getSession(); UserInfo userInfo = (UserInfo) session.getAttribute("userInfo"); HttpServletResponse response = (HttpServletResponse) res; if (userInfo == null) { // session过期 redirect(request, response); } else { System.out.println(userInfo.getUserId() + "========" + userid); if (userid.equals(userInfo.getUserId())) { chain.doFilter(req, res); } else { // 登录名不一致 redirect(request, response); } } } } private void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException { String requestType = request.getHeader("X-Requested-With"); if (requestType != null && requestType.equals("XMLHttpRequest")) { response.setStatus(HttpServletResponse.SC_FORBIDDEN); } else { String href = http://www.mamicode.com/request.getContextPath()"/pages/sessionTimeOut.jsp"; response.sendRedirect(href); } } @Override public void init(FilterConfig config) throws ServletException { }}
在web.xml中
<filter> <filter-name>sessionCheckFilter</filter-name> <filter-class>com.gwssi.csdb.fbk.authority.SessionCheckFilter</filter-class> </filter> <filter-mapping> <filter-name>sessionCheckFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>
Web中的监听器【Listener】与过滤器【Filter】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。