文档章节

单点登录的简单实现

炸油条的配泽
 炸油条的配泽
发布于 2016/04/17 15:53
字数 279
阅读 175
收藏 5

用到的工具类:

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";
}


© 著作权归作者所有

共有 人打赏支持
炸油条的配泽
粉丝 1
博文 1
码字总数 279
作品 0
武汉
程序员
私信 提问
单点登录与集群

需求描述: 工作类型: Web应用开发 技能要求: Java 预计完成时间: 2016-06-30 驻场要求: 需定期到[广东省-广州市]驻场 要求提供发票: 增值税专用发票 需求详情: 1) 现状 a) 目前外部网...

13078878620
2016/05/18
5
0
企业环境中的账户与身份管理 之:2-非SSO也

上一篇的《企业环境中的账户与身份管理 之:1-认识》中讲到了什么是身份,什么是身份信息,身份信息有哪些,进行身份信息的统一管理,是要解决什么样的根本问题 。。 如我所猜想的那样,在回...

bisheng.hu
2011/03/01
0
0
spring+springmvc+Interceptor+jwt+redis实现sso单点登录

在分布式环境中,如何支持PC、APP(ios、android)等多端的会话共享,这也是所有公司都需要的解决方案,用传统的session方式来解决,我想已经out了,我们是否可以找一个通用的方案,比如用传...

SpringCloud关注者
2017/11/10
819
2
1.请求安全-- 一个简单的 单设备登录 单点登录

一个简单的 SSO 单点登录 单设备登录 解决方案 SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的...

喵了_个咪
2015/08/14
0
2
FineReport和泛微OA(Ecology)的单点登录集成方案

最近出现了很多关于帆软报表和泛微OA的集成问题,均出现在“单点登录”上。直接也有相关的文章介绍一些FineReport和泛微集成的背景、价值等,以及FineReport和OA的深度集成的方案,但是并没有...

雄霸天下啦
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL学习笔记之二

数据库的操作总结就是:增删改查(CURD),今天记录一下基础的检索查询工作。 检索MySQL 1.查询表中所有的记录 mysql> select * from apps;+----+------------+-----------------------+------...

凌宇之蓝
27分钟前
0
0
PaddlePaddle-GitHub的正确打开姿势

GitHub是一个面向开源及私有软件项目的托管平台、也是项目版本管理工具,会使用它是程序员入门的必备技能。PaddlePaddle也不例外,所有的源码及项目进展都在GitHub上开源公布。但对于刚入门写...

深度学习之路
27分钟前
1
0
最强NLP模型BERT可视化学习

摘要: 最强NLP模型谷歌BERT狂破11项纪录,全面超越人类,本文通过可视化带你直观了解它。 2018年是自然语言处理(Natural Language Processing, NLP)领域的转折点,一系列深度学习模型在智...

阿里云官方博客
34分钟前
1
0
导出功能

public void downloadD(HttpServletRequest request, HttpServletResponse res,String contractName, String contractPath) throws IOException {// FileAttach fileAttach = fileA......

卖星星的小矮人
38分钟前
1
0
gradle 打包可执行jar包

group 'android.com'version '1.0-SNAPSHOT'apply plugin: 'java'sourceCompatibility = 1.8repositories { mavenCentral()}jar { manifest { attributes ('Main-......

zdglf
49分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部