`
我是温浩然
  • 浏览: 104164 次
文章分类
社区版块
存档分类
最新评论

单点登录3

 
阅读更多

在登录的时候,不只是客户端能登录,服务器端,也是一个完整的登录项目。

通过前面两篇可以看出,我的架构用的是spring 的MVC和spring注解,其实我根本就不明白,只是会用那么一点。

下面是登录方法的代码,包括,本地登录,和客户端的登录两种。

package com.tujia.tuuser.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.util.WebUtils;

import com.tujia.common.config.ResultCode;
import com.tujia.common.exception.UnAuthedException;
import com.tujia.core.security.SecurityUtil;
import com.tujia.core.util.Md5Util;
import com.tujia.core.util.ParamChecker;
import com.tujia.tuuser.entity.User;
import com.tujia.tuuser.service.UserService;

@Controller
public class UserLoginController extends BaseController {

	@Resource
	private UserService UserService;
	@Resource
	private SecurityUtil securityUtil;
	
	@RequestMapping(value = "/tulogin", produces = "text/html")
    public String listByUser(Model model,HttpServletRequest request, HttpServletResponse response) {
    	
		securityUtil.requrl(request,response);
    	return "tulogin";
    }
	
	/**
	 * 登录方法/本地登录
	 * @param map
	 * @param request
	 * @param response
	 */
	@RequestMapping(value = "/tulogin")
	public void loginServer(@RequestBody Map<String, Object> map,
			HttpServletRequest request, HttpServletResponse response) throws UnAuthedException {
		response.setCharacterEncoding("UTF-8");
		String phone = (String) map.get("phone");
		String password = Md5Util.md5((String) map.get("password"));
		
		ResultCode resultCode = ResultCode.SUCCEED;
		Object result = null;
		
		try {
			ParamChecker.notEmpty("phone", phone);
			ParamChecker.notEmpty("password", password);
			
			
			User user = UserService.login(request, response, phone, password);
			
			String requrlCookie = securityUtil.getReqURL(request,response);
			result = requrlCookie; 
			
		} catch (UnAuthedException e) {
			logger.error(e.getMessage());
			resultCode = e.getResultCode();
			result = e.getMessage();

		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			resultCode = ResultCode.INTERNAL_ERROR;
			result = e.getMessage();
		}
		setResponse(response, resultCode, result);
	}
	
	/**
	 * 退出接口
	 */
	@RequestMapping(value = "/tulogout",method =RequestMethod.POST)
	public void logout(
			HttpServletRequest request, HttpServletResponse response) {
		ResultCode resultCode = ResultCode.SUCCEED;
		UserService.logout(request, response);
		Object result = null;
		setResponse(response, resultCode, result);
	}
	
	
	//登录接口,客户端通过此方法进行登录。
	@RequestMapping(value = "/tuloginMethod")
	public void login(@RequestBody Map<String, Object> map,
			HttpServletRequest request, HttpServletResponse response) throws UnAuthedException {
		response.setCharacterEncoding("UTF-8");
		String phone = (String) map.get("phone");
		String password = Md5Util.md5((String) map.get("password"));
		ResultCode resultCode = ResultCode.SUCCEED;
		Object result = null;
		User user = null;
		String token = null;
		
		try {
			ParamChecker.notEmpty("phone", phone);
			ParamChecker.notEmpty("password", password);
			
			
			user = UserService.login(request, response, phone, password);
			token = (String) request.getAttribute("token");
		} catch (UnAuthedException e) {
			logger.error(e.getMessage());
			resultCode = e.getResultCode();
			result = e.getMessage();

		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			resultCode = ResultCode.INTERNAL_ERROR;
			result = e.getMessage();
		}
		setResponseMethod(response, resultCode, result, user , token);
	}
	
	
	//tokenMethod,通过token,客户端验证用户是否登录。
	@RequestMapping(value = "/tokenMethod")
	public void tuloginMethod(@RequestBody Map<String, Object> map,
			HttpServletRequest request, HttpServletResponse response) throws UnAuthedException {
		
		response.setCharacterEncoding("UTF-8");
		String token = (String) map.get("token");
		boolean tokenServer = securityUtil.getAuthTuUser(token);
		String ret = "";
        try {
			PrintWriter out = response.getWriter();
			if(tokenServer){
				ret = "success";
				out.println(ret);
	            out.close();
			}else{
				ret = "noLogin";
				out.println(ret);
	            out.close();
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

其中,在方法后面的
setResponseMethod
这个方法,就是传值的,通过json来传值。给前台,或者给客户端。

下面是代码。

protected void setResponse(HttpServletResponse resp, ResultCode resultCode,
            Object result) {
        setResponse(resp, resultCode, result, null);
    }

    protected void setResponse(HttpServletResponse resp, ResultCode resultCode,
            Object result, String callback) {
        try {
            resp.setCharacterEncoding("utf-8");
            PrintWriter out = resp.getWriter();

            Map<String, Object> ret = new LinkedHashMap<String, Object>();
            ret.put("code", resultCode.getCode());
            ret.put("data", result);
            String responseStr = GSON.toJson(ret);
            out.println(responseStr);
            out.close();

        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    }
这个是往前台页面传递值的。
另一个,是给客户端传递值的。代码如下。
protected void setResponseMethod(HttpServletResponse resp, ResultCode resultCode,
            Object result,User user,String token) {
        setResponseMethod(resp, resultCode, result,user,token , null);
    }
    protected void setResponseMethod(HttpServletResponse resp, ResultCode resultCode,
            Object result,User user ,String token , String callback) {
        try {
        	resp.setCharacterEncoding("utf-8");
            PrintWriter out = resp.getWriter();
            Map<String, Object> ret = new LinkedHashMap<String, Object>();
            ret.put("code", resultCode.getCode());
            ret.put("data", result);
            ret.put("user", user);
            ret.put("token", token);
            String responseStr = GSON.toJson(ret);
            out.println(responseStr);
            out.close();
            resp.setCharacterEncoding("utf-8");
            
            
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    }

这两个传递的json,引发出来两个问题,

一个是,在JS中,怎样解析JSON,获取其中的数据。

一个是,json中的json怎样转化成User对象。

这两个问题,都看另外两篇文章吧。

分享到:
评论

相关推荐

    金蝶单点登录k3wise源码.rar

    网页单点登录金蝶k3客户端源码,旗舰版应该可用。有点瑕疵,但比百度中能找到的代码应该更全面点,涉及到注册表数据修改,没有修改注册表的话,会打不开财务会计的报表。瑕疵指需要固定登录人的密码,不能随便修改,...

    exchange邮件系统单点登录整合

    ### Exchange邮件系统单点登录整合知识点 #### 一、单点登录(Single Sign-On, SSO)概述 单点登录是一种认证机制,允许用户通过一次身份验证就能访问多个应用程序和服务,而无需重复登录。这种机制提高了用户体验...

    K3单点登录二次开发指导文档

    【K3单点登录二次开发指导文档】是针对金蝶K3系统中单点登录功能进行集成应用的技术文档,旨在帮助具有相应开发经验的人员理解并实现与K/3门户、K/3、K/3HR等应用系统的无缝对接。单点登录(Single Sign-On,SSO)是...

    用友U8开发单点登录方案

    用友U8开发单点登录方案 本文主要介绍了用友U8开发单点登录方案的设计背景、应用场景、实现方式和技术细节。单点登录方案的设计目标是实现非U8系统与U8系统的集成,共享用户名和密码,实现单点登录。 设计背景 ...

    cas 单点登录 解决方案.

    3. 系统集成:cas 单点登录解决方案需要与不同的应用系统集成,以便用户可以使用单点登录访问所有相互信任的应用系统。 cas 单点登录解决方案可以带来许多好处,但是也存在一些挑战和限制。例如,cas 单点登录解决...

    JEECG 单点登录说明文档

    JEECG智能开发平台的单点登录(SSO)功能是通过集成Kisso实现的,Kisso是一个轻量级Java权限框架,它利用加密会话cookie机制来实现单点登录服务。单点登录是一种用户登录认证方法,允许用户在多个应用系统中,只通过...

    华为防火墙实现单点登录方式.docx

    然后,终端设备加入AD域后,AD域控服务器会往终端设备上安装一个脚本,这个脚本是来源于单点登录服务程序,所以终端的上下线等操作会通过域传给AD域控服务器,并且还会通过脚本将信息传递给单点登录服务程序,单点...

    sso单点登录ppt.ppt

    sso单点登录ppt.ppt

    金蝶EAS portal单点登录到SHR文档

    金蝶EAS portal单点登录到SHR文档 单点登录(Single Sign-On,SSO)是指用户只需要输入一次用户名和密码,即可访问多个相关的应用系统,而不需要再次输入登录信息。金蝶EAS portal单点登录到SHR文档提供了详细的...

    Jeecg配置单点登录 登录验证完整代码

    在本场景中,我们关注的是Jeecg如何配置单点登录(Single Sign-On,简称SSO)以及相关的登录验证代码。单点登录是一种网络应用架构中的安全机制,允许用户在一次登录后,就能访问多个相互关联的应用系统,而无需再次...

    NC6.5单点登录源码

    NC6.5单点登录,支持单点打开首页以及待办事项直接打开NC单据

    C#.net实现单点登录

    单点登录(Single Sign-On,简称SSO)是一种网络用户身份验证机制,允许用户在一个系统或应用中登录后,无须再次输入凭证就能访问多个相互信任的系统或应用。在IT行业中,C#.NET框架提供了丰富的功能来实现跨域单点...

    第8部分:单点登录服务接口规范.docx

    同时,该规范还对涉及的重要术语进行了明确的定义,比如单点登录、单点登录服务和单点登录票据等,以消除在不同应用场景中的歧义和误解。 四、单点登录服务逻辑与接口定义 规范中对单点登录服务的逻辑进行了详细的...

    单点登录学习

    单点登录学习 单点登录是一种常用的身份验证机制,它允许用户使用一个用户名和密码来访问多个相关的应用系统。单点登录系统的主要组件包括身份验证服务器、应用服务器和客户端。身份验证服务器负责验证用户的身份,...

    漂亮的单点登录网页模版

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统上登录后,无需再次提供凭证就能访问多个相互信任的系统。它简化了用户管理和提升了用户体验,因为用户不再需要记住多个密码或者在...

    跨域单点登录

    单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中。本文从业务的角度分析了单点登录的需求和应用领域;从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面SSO的实现...

    单点登录系统(CS程序)

    基于portal的单点登录系统,系统由CS服务端和BS服务系统组成,一般用户可以通过IE来访问单点登录系统,附件内包含了readme.txt有本系统说明。 备注: 这里只有CS程序及说明,BS程序可以找资源名称:单点登录系统...

    powerBI单点登录

    适用于门户开发,此功能只限于IE浏览器可用,使用的是ActiceXobject函数,实现单点登录

    nc63、nc65单点登录方案

    ### nc63、nc65单点登录方案详解 #### 一、概述 单点登录(Single Sign-On,简称SSO)是一种用户只需要一次登录就能访问所有相互信任的应用系统的认证方式。这种机制不仅提升了用户体验,同时也提高了系统的安全性...

Global site tag (gtag.js) - Google Analytics