javaWeb实现在线用户限制和相同账户多处登录限制
2017-02-06 14:15
561 查看
首先创建在线用户集合类:
然后配置session监听器(xml文件配置省略):
配置自定义拦截器(xml文件配置省略),在拦截器中对当前登陆用户进行判断(实现相同账户多处登陆限制):
实现当前在线用户限制:
在登陆处加上判断即可:
public class OnlineUserMap { public static Map<String , UserInfo > onlineuser = new HashMap<String , UserInfo >(); /** * 得到在线用户 * @return */ public static Map<String , UserInfo > getOnlineuser(){ return onlineuser; } /** * 添加在线用户 * @param sessionId * @param userName * @return */ public void addOnlineUser(String userId, UserInfo userinfo){ onlineuser.put(userId, userinfo); } /** * 移除用户 * @param userName */ public void removeUser(String sessionId){ for(String userId : onlineuser.keySet()){ if(onlineuser.get(userId).getSessionId().equals(sessionId)){ onlineuser.remove(userId); break; } } } }
然后配置session监听器(xml文件配置省略):
public class UserLoginListener implements HttpSessionAttributeListener { @Override public void attributeAdded(HttpSessionBindingEvent se) { // TODO Auto-generated method stub String username = se.getName(); String sessionId = se.getSession().getId(); if (username == BaseAction.SESSION_USER_INFO){ UserInfo userInfo = (UserInfo)se.getSession().getAttribute(BaseAction.SESSION_USER_INFO); new OnlineUserMap().addOnlineUser(userInfo.getUserId().toString(), userInfo); } } @Override public void attributeRemoved(HttpSessionBindingEvent se) { // TODO Auto-generated method stub String username = se.getName(); String sessionId = se.getSession().getId(); if (username == BaseAction.SESSION_USER_INFO){ new OnlineUserMap().removeUser(sessionId); } } @Override public void attributeReplaced(HttpSessionBindingEvent se) { // TODO Auto-generated method stub String username = se.getName(); String sessionId = se.getSession().getId(); if (username == BaseAction.SESSION_USER_INFO){ UserInfo userInfo = (UserInfo)se.getSession().getAttribute(BaseAction.SESSION_USER_INFO); new OnlineUserMap().addOnlineUser(userInfo.getUserId().toString(), userInfo); } } }
配置自定义拦截器(xml文件配置省略),在拦截器中对当前登陆用户进行判断(实现相同账户多处登陆限制):
public class CustomInterceptor implements Interceptor { private static final long serialVersionUID = 1L; public void destroy() { } public void init() { } public String intercept(ActionInvocation invocation) throws Exception { if (invocation.getAction() instanceof BaseAction) { BaseAction baseAction = (BaseAction) invocation.getAction(); Userinfo userInfo = (UserInfo) getSession().getAttribute(SESSION_USER_INFO); if (userInfo == null) throw new NotLogedInException();//未登录 UserInfo loginuserinfo = new OnlineUserMap().onlineuser.get(userInfo.getUserId());//当前登陆的Session/User if(!loginuserinfo.getSessionId().equals(getSession().getId())){//用户在别的地方登陆 getSession().setAttribute(SESSION_USER_INFO, null); getSession().setAttribute(KICKOUT_MESSAGE, "用户" + userInfo.getName() + "已在地址‘"+ loginuserinfo.getIp()+"’重新登陆,当前登陆失效!"); throw new NotLogedInException();//未登录 } } else { return invocation.invoke(); } } }
实现当前在线用户限制:
在登陆处加上判断即可:
if(new OnlineUserMap().onlineuser.keySet().size() > 50){ writeJson("当前在线的用户超过限制,请稍后再试!"); }
相关文章推荐
- JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)
- Windows 10家庭版也能共享打印机(中)解除Guest账户网络登录限制,实现局域网共享
- VB.net 临时表实现限制用户重复登录
- 用组策略实现域用户访问moss站点不需要账户登录
- 软概(lesson 1):Javaweb实现用户登录界面
- angularjs给Model添加拦截过滤器,路由增加限制,实现用户登录状态判断
- java web相同用户重复登陆,即用户唯一登录,后登陆挤掉先登录的,设置限制用户同时登陆人数
- 【MarketAnalysis总结】4.0用户登录等账户安全访问的实现
- 面试题之redis实现限制1小时内每用户Id最多只能登录5次
- 过滤器和拦截器的比较及未登录用户权限限制的实现
- 在Forms验证模式下,实现多个站点(SubDomain相同)共享同一用户登录状态
- JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤
- 局域共享解决——用户账户限制,可能的原因包括不允许空密码,登录时间限制
- 过滤器和拦截器的比较及未登录用户权限限制的实现
- 实现多个站点(SubDomain相同)共享同一用户登录状态
- 在Forms验证模式下,实现多个站点(SubDomain相同)共享同一用户登录状态
- Java 多用户登录限制的实现方法
- angularjs给Model添加拦截过滤器,路由增加限制,实现用户登录状态判断
- 过滤器和拦截器的比较及未登录用户权限限制的实现
- 过滤器和拦截器的比较及未登录用户权限限制的实现