在一般的情况下,使用单点登录或者控制同一个账号允许登录的次数,我们可以用spring的安全机制,如下:
<session-management>
<concurrency-control error-if-maximum-exceeded="false" max-sessions="1" />
</session-management>
<concurrency-control error-if-maximum-exceeded="false" max-sessions="1" />
</session-management>
但是当我们使用自定义登录过滤器时,concurrency-control 将失效,我在网上也找了很多的资料想解决失效的问题,但是用了很多方法都没有解决我的问题,所以我自己写了一个控制程序,控制单点登录和指定登录次数,非常的灵活,使用时非常的方便,现在分享给大家,希望能帮到有需要的人。
首先创建两个类:SessionCounter 和SessionManager ,静心认真看下面的代码,按照下面的操作进行,应该是没问题的。
使用HttpSessionListener接口监听Session的创建和失效
SessionCounter 类代码如下:
package info.catarc.util;
import java.util.HashMap;
import java.util.Iterator;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
@SuppressWarnings("unchecked")
public class SessionCounter implements HttpSessionListener {
private static HashMap<String,HashMap> sessionMap = new HashMap<String,HashMap>();
public static HashMap<String, HashMap> getSessionMap() {
return sessionMap;
}
public static void setSessionMap(HashMap<String, HashMap> sessionMap)