这里我们主要是用到filter(拦截器)和session的id的唯一标识性,
首先我们在登验证页面方设置一个验证,如果验证通过我们将session的唯一的id和用户名存到在map集合中。并且保存到全局域,如果是用户第二次登录的话将map集合中对应的value值改掉,这样第二次登录就匹配不到之前session 的id了。
代码如下:
if(username.equals(users)&&password.equals(passs)) {
Map map=new HashMap();
if(context.getAttribute("maplogins")!=null)
map=(Map) context.getAttribute("maplogins");
int psign=0;
if(map!=null)
for(Entry i1:map.entrySet()) {
if(i1.getKey().equals(users)) {
i1.setValue(session.getId());
psign=1;
}
}
if(psign==0) {
map.put(i.getUsername(),session.getId());
}
context.setAttribute("maplogins", map);
2.在拦截器中。我们遍历map集合如果session的id不能匹配则用户下线
Map map=(Map) context.getAttribute("maplogins");
if(context.getAttribute("maplogins")!=null)
for(Entry i:map.entrySet()) {
System.out.println(i.getKey()+"/"+i.getValue());
if(session.getAttribute("usermi")!=null)
if(session.getAttribute("usermi").equals(i.getKey())&&session.getId().equals(i.getValue())) {
sign="yes";
}
if(sign.equals("no")) {
((HttpServletResponse)response).sendRedirect(""+path2+"/login.jsp");
}
这里的ServletContext域我们要在拦截器初始化方法中定义。
private static ServletContext context;
public void init(FilterConfig fConfig) throws ServletException {
context=fConfig.getServletContext();
}
新手上路,请多指教。