第一种方法:
package redSess;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionMapping;
public class sessionCheck
{
private static sessionCheck sessioncheck;
public sessionCheck(HttpServlet servlet)
{
}
public static sessionCheck getInstance(HttpServlet servlet)
{
if (sessioncheck==null)
{
sessioncheck=new sessionCheck(servlet);
}
return sessioncheck;
}
public void setSession(String userName,HttpServlet servlet,HttpSession session,ActionMapping mapping)
{
final ServletContext sc = servlet.getServletContext();//取得容器,容器中根据用户唯一标识userID存放session
if (sc.getAttribute(userName) != null)
{
// 第二次登陆后第一次无效
((HttpSession) sc.getAttribute(userName)).invalidate();// 清除第一次登陆的session
System.out.println(session);
}
sc.setAttribute(userName, session);//放入当前最新session
mapping.findForward("sessionDestroy") ;
}
}
MemberLogin:
Java代码
sessionCheck.getInstance(this.getServlet()).setSession(userName, servlet, session, mapping);
jsp:
JSP代码
<body ="sessionDestroy()">
<language="java" type="text/java">
sessionDestroy()
{
alert("连接超时,或帐号已在别处登陆,请查证后重新登陆");
location.href = "UserLogin.jsp" ;
}
</>
这样在两台电脑上后登陆的人用户就会把先登陆的给踢掉,但是暂时还没实现在同一台电脑上后登陆的用户把先登陆的踢掉的功能
上面是在后台实现的,如果要在JSP中做,直接appliction.getAttribute(userId),appliction.setAttribute(userId, session)就行
第二种:
同步Session控制
如果你希望限制单个用户只能登录到你的程序一次,Spring Security通过添加下面简单的部分支持这个功能。 首先,你需要把下面的监听器添加到你的web.xml文件里,让Spring Security获得session生存周期事件:
<listener>
<listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class>
</listener>
然后,在你的application context加入如下部分:
<http>
...
<concurrent-session-control max-sessions="1" />
</http>
这将防止一个用户重复登录好几次-第二次登录会让第一次登录失效。 通常我们更想防止第二次登录,这时候我们可以使用
<http>
...
<concurrent-session-control max-sessions="1" exception-if-maximum-exceeded="true"/>
</http>
第二次登录将被阻止。