单点登录的简单实现
单点登录的简单实现
炸油条的配泽 发表于2年前
单点登录的简单实现
  • 发表于 2年前
  • 阅读 164
  • 收藏 5
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 该方法将已登录用户id与ip放入application中,登录时在application中匹配id与ip实现单点登录。

用到的工具类:

import javax.servlet.http.HttpServletRequest;

public class IPUtil {
	/**
	 * 获取请求端ip
	 * @param request
	 * @return
	 */
	public static String getIPAddress(HttpServletRequest request) { 
		String ip = request.getHeader("x-forwarded-for"); 
		if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
		ip = request.getHeader("Proxy-Client-IP"); 
		} 
		if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
		ip = request.getHeader("WL-Proxy-Client-IP"); 
		} 
		if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
		ip = request.getRemoteAddr(); 
		} 
		return ip; 
	} 
}

登录实现:

/**
 * 用户登录
 * @return
 */
 public String login(){
    //获取request
    HttpServletRequest request = ServletActionContext.getRequest();
    //获取application
    ServletContext app = request.getSession().getServletContext();
    //获取已登录用户集合
    Hashtable loginUsers = (Hashtable) app.getAttribute("loginUsers");
    //获取ip
    String ip = IPUtil.getIPAddress(request);
    //System.out.println("登录人数:"+loginUsers.size());
    //获取登录的用户信息
    List<Object> result = userServ.userLogin(user);
    if(result.size()>0){
        User loginUser = (User) result.get(0);
        //System.out.println("登录ip:"+IPUtil.getIPAddress(request));
			
        /*
        * 判断application中是否存在登录用户的id,
        * 如果当前登录客户端ip地址与已登录的用户ip不符,则不允许登录
        */
        if(loginUsers.get(loginUser.getUserId())!=null & !ip.equals(loginUsers.get(loginUser.getUserId()))){
            request.setAttribute("msg", "用户已登录");
            return "login_fail";
        }
        //用户登录时将用户id与ip存入application
        loginUsers.put(loginUser.getUserId(), ip);
        request.getSession().setAttribute("loginUser", loginUser);
        return "login_success";
    }
    request.setAttribute("msg", "用户名或密码错误");
    return "login_fail";
}


标签: 单点登录
共有 人打赏支持
粉丝 2
博文 1
码字总数 279
×
炸油条的配泽
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: