Web中的监听器【Listener】与过滤器【Filter】 实例

监听器实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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);
    }
 
}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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;
    }
 
}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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中增加

1
2
3
4
5
6
7
<session-config>
       <session-timeout>10</session-timeout>
   </session-config>
    
   <listener>
       <listener-class>com.gwssi.listener.SessionListener</listener-class>
   </listener>

 

在登录时

1
2
//添加进入SessionFactory,以供记录是否在线
            SessionFactory.getInstance().addLogin(session, userInfo.getUserId());

 页面调用:
import="com.oddel.listener.SessionFactory;
SessionFactory.getInstance().isOnline(userid)
返回true表示用户当前是在线的。
返回false表示用户当前是不在线的。

 

参考博客:

http://www.cnblogs.com/sherryueda/p/4273169.html

过滤器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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 = request.getContextPath()
                    + "/pages/sessionTimeOut.jsp";
            response.sendRedirect(href);
        }
    }
 
    @Override
    public void init(FilterConfig config) throws ServletException {
    }
 
}

 在web.xml中

1
2
3
4
5
6
7
8
9
<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>
    

 

参考博客:

http://www.cnblogs.com/sherryueda/p/4275805.html

 

posted @   qingyezhu  阅读(466)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示