DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 经验分享 > Java组件

JSP防止重复登录例子

JSP防止重复登录

请看如下例子 

1:新建web工程

JSP防止重复登录【完整例子】 - 正大光明 - 天下大势,为我所控

 

 

2:新建com.user

依次新建如下JAVA文件

LoginAction.java

package com.user;

 

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Date;

import java.util.Set;

import java.util.Map.Entry;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

@SuppressWarnings("unchecked")

public class LoginAction extends HttpServlet

{

    private static final long serialVersionUID = 1L;

    public static Map<String,OnLineUser> onLineUserMap = newHashMap<String,OnLineUser>();

   

    public void init() throws ServletException

    {

       String path = this.getServletContext().getContextPath();

       this.getServletContext().setAttribute("path",path);

    }

   

   protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException

    {

       String action = req.getParameter("method");

       if("login".equals(action))

       {          

           String hydh = req.getParameter("hydh");

           String hymc = req.getParameter("hymc");          

           if(checkLoginUser(hydh))

           {

              req.setAttribute("msg","该行员已经登录,请联系管理员");

              req.getRequestDispatcher("/login.jsp").forward(req,resp);

              return;

           }

          

           OnLineUser oLineUser = new OnLineUser();

           oLineUser.setHydh(hydh);

           oLineUser.setDlsj(new Date().toLocaleString());

          

           LoginUser loginUser = new LoginUser();

           loginUser.setHydh(hydh);

           loginUser.setHymc(hymc);

          

           SessionContainer sessionContainer = new SessionContainer();

           sessionContainer.setLoginUser(loginUser);

          

           oLineUser.setSessionContainer(sessionContainer);

          

           req.getSession().setAttribute("USER",sessionContainer);

           onLineUserMap.put(hydh,oLineUser);

          

           resp.sendRedirect(req.getContextPath()+"/user.do?method=list");

           return;

          

       }

       else if("logout".equals(action))

       {

           OnLineUser ol =LoginAction.onLineUserMap.get(req.getParameter("hydh"));

           if(ol!=null)

           {

              ol.getSessionContainer().shutdown();

           }

           if("1".equals(req.getParameter("type")))

           {

              resp.sendRedirect(req.getContextPath()+"/user.do?method=list");

           }

           else

           {

              if(req.getSession() != null)

              {

                  req.getSession().invalidate();

              }

              resp.sendRedirect(req.getContextPath()+"/login.jsp");

           }

           return;

       }

    }

   

    protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException

    {

        this.doGet(req, resp);

    }

   

    private boolean checkLoginUser(String hydh)

    {

       OnLineUser ol = (OnLineUser)onLineUserMap.get(hydh);

       if(ol==null)

       {

           return false;

       }

       else

       {

           LoginUser lu = ol.getSessionContainer().getLoginUser();

           if(lu==null)

           {

              return false;

           }

           else

           {

              return true;

           }

       }

    }

   

    public static List getUserList()

    {

       List list = new ArrayList();

       Set<Entry<String,OnLineUser>> sets = onLineUserMap.entrySet();

       Iterator iter = sets.iterator();

       while( iter.hasNext())

       {

           Entry en = (Entry)iter.next();

           list.add(en.getValue());

       }

       return list;

    }

}

 

LoginFilter.java

package com.user;

 

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.HttpSession;

 

public class LoginFilter implements Filter

{

    public void destroy()

    {

 

    }

 

    public void doFilter(ServletRequest req, ServletResponse resp,FilterChain fc)throws IOException, ServletException

    {

       HttpServletRequest request = (HttpServletRequest)req;

      

       String url = request.getRequestURI();

      

       String index = request.getContextPath()+"/";

      

       if(url.equals(index) || url.indexOf("login.jsp") != -1 || url.indexOf("index.jsp") != -1 || url.indexOf("login.do") != -1)

       {

           fc.doFilter(req,resp);

           return;

       }

      

       HttpSession session = request.getSession();

       Object user = session.getAttribute("USER");

      

       if( user == null)

       {

           request.setAttribute("msg","请先登录");

           request.getRequestDispatcher("/login.jsp").forward(req,resp);

           return;

       }

       else

       {

           SessionContainer sc = (SessionContainer)user;

           if(sc.getLoginUser() == null)

           {

              request.setAttribute("msg","请先登录");

              request.getRequestDispatcher("/login.jsp").forward(req,resp);

              return;

           }

       }

       fc.doFilter(req,resp);

       return;

    }

 

    public void init(FilterConfig arg0) throws ServletException

    {

 

    }

}

 

LoginUser.java

package com.user;

 

public class LoginUser

{

    private String hydh;

    private String hymc;

   

    public String getHydh() {

       return hydh;

    }

    public void setHydh(String hydh) {

       this.hydh = hydh;

    }

    public String getHymc() {

       return hymc;

    }

    public void setHymc(String hymc) {

       this.hymc = hymc;

    }

}

OnLineUser.java

package com.user;

 

public class OnLineUser

{

    private String hydh;

    private String dlsj;

   

    private SessionContainer sessionContainer;

 

    public String getHydh()

    {

       return hydh;

    }

 

    public void setHydh(String hydh) {

       this.hydh = hydh;

    }

    public String getDlsj() {

       return dlsj;

    }

    public void setDlsj(String dlsj) {

       this.dlsj = dlsj;

    }

    public SessionContainer getSessionContainer() {

       return sessionContainer;

    }

    public void setSessionContainer(SessionContainer sessionContainer) {

       this.sessionContainer = sessionContainer;

    }

}

 

SessionContainer.java

package com.user;

 

import javax.servlet.http.HttpSessionBindingEvent;

import javax.servlet.http.HttpSessionBindingListener;

 

public class SessionContainer implements HttpSessionBindingListener

{

    private LoginUser loginUser = null;

 

    public void valueUnbound(HttpSessionBindingEvent event)

    {

       shutdown();

    }

    public void valueBound(HttpSessionBindingEvent event)

    {

      

    }

    public LoginUser getLoginUser() {

       return loginUser;

    }

 

    public void setLoginUser(LoginUser loginUser) {

       this.loginUser = loginUser;

    }

    public void shutdown()

    {

       if(this.loginUser != null)

       {

            LoginAction.onLineUserMap.remove(this.loginUser.getHydh());

            this.setLoginUser(null);

       }

    }

}

 

UserAction.java

package com.user;

 

import java.io.IOException;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("unchecked")

public class UserAction extends HttpServlet

{

    private static final long serialVersionUID = 1L;

 

   protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException

    {

       String action = req.getParameter("method");

       if("list".equals(action))

       {

           List list = LoginAction.getUserList();

           req.setAttribute("list", list);

           req.getRequestDispatcher("/list.jsp").forward(req,resp);

           return;

       }

    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException

    {

       this.doGet(req, resp);

    }

}

 

3:在WebRoot目录下依次新建如下JSP文件

Index.jsp

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<meta http-equiv="Content-Language" content="zh-CN" />

<title>登录</title>

</head>

 

<body>

    <href="${ path}/login.jsp">登录</a>

</body>

</html>

 

List.jsp

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<meta http-equiv="Content-Language" content="zh-CN" />

<title>用户列表</title>

<script type="text/javascript">

    function logout(hydh)

    {

       if(confirm("你确定要踢出该用户吗"))

       {

           window.location.href="${ path}/login.do?method=logout&type=1&hydh="+hydh;

       }

    }

    function shutdown()

    {

       if(confirm("你确定要退出吗"))

       {

           window.location.href="${ path}/login.do?method=logout&hydh=${sessionScope.USER.loginUser.hydh}";

       }

    }

    function refsh()

    {

       window.location.href="${ path}/user.do?method=list";

    }

   

</script>

</head>

 

<body>

<center>

    <h3>你好,欢迎回来 ${sessionScope.USER.loginUser.hydh}</h3>

</center>

<table align="center" width="80%" border="1">

    <tr>

       <td>登录代号</td>

       <td>登录时间</td>

       <td>操作</td>

    </tr>

    <c:forEach var="u" items="${requestScope.list}">

       <tr>

           <td>${ u.hydh}</td>

           <td>${ u.dlsj}</td>

           <td><href="javascript:logout('${ u.hydh}')">踢出</a></td>

       </tr>

    </c:forEach>

</table>

 

<br />

<href="javascript:refsh()">刷新列表</a>&nbsp;&nbsp;&nbsp;&nbsp;

<href="javascript:shutdown()">重新登录</a>&nbsp;&nbsp;&nbsp;&nbsp;

<href="${ path}/user.do?method=download">下载用户</a>

</body>

</html>

 

Login.jsp

 

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<meta http-equiv="Content-Language" content="zh-CN" />

<title>登录</title>

</head>

 

<body>

    <center>

       <h2 style="color:red;">${ requestScope.msg}</h2>

    </center>

    <center>

    <form action="${ path}/login.do?method=loginmethod="post">

        hydh:<input type="text" name="hydh" /><br />

        hymc:<input type="text" name="hymc" /><br />

        <input type="submit" value="登录"/>

    </form>

    </center>

</body>

</html>

 

4:修改web.xml文件,添加如下内容

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

    xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

   

    <listener>

       <listener-class>com.user.SessionContainer</listener-class>

    </listener>

   

    <filter>

       <filter-name>login_filter</filter-name>

       <filter-class>com.user.LoginFilter</filter-class>

    </filter>

    <filter-mapping>

       <filter-name>login_filter</filter-name>

       <url-pattern>*.do</url-pattern>

    </filter-mapping>

    <filter-mapping>

       <filter-name>login_filter</filter-name>

       <url-pattern>*.jsp</url-pattern>

    </filter-mapping>

   

    <servlet>

       <servlet-name>login_servlet</servlet-name>

       <servlet-class>com.user.LoginAction</servlet-class>

       <load-on-startup>2</load-on-startup>

    </servlet>

    <servlet-mapping>

       <servlet-name>login_servlet</servlet-name>

       <url-pattern>/login.do</url-pattern>

    </servlet-mapping>

   

    <servlet>

       <servlet-name>user_servlet</servlet-name>

       <servlet-class>com.user.UserAction</servlet-class>

    </servlet>

    <servlet-mapping>

       <servlet-name>user_servlet</servlet-name>

       <url-pattern>/user.do</url-pattern>

    </servlet-mapping>

   

    <session-config>

       <session-timeout>5</session-timeout>

    </session-config>

   

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

</web-app>

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号