关闭

单点登录3

标签: spring单点登录自定义单点登录json
386人阅读 评论(0) 收藏 举报
分类:

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

通过前面两篇可以看出,我的架构用的是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对象。

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

0
0
查看评论

NCV63-portal单点登录集成方案

NC63单点登录方案说明文档     1.  简述          NC60的单点登录方案和NC5x的单点登录方案比较相近,但是其注册和登录的url格式有所变化,并且增加...
  • qq396972348
  • qq396972348
  • 2017-04-07 11:35
  • 984

J2EE与DiscuzX3.2的UCenter实现单点登录

最近笔者在实现java项目对discuz的整合。在此过程中,查了很多这方面的资料,发现网上并没有说得比较全面的文章。笔者博取众长以及自己在此过程中遇到的问题,写下来供大家参考,希望大家可以在这过程中少走弯路。笔者在此过程中主要参考了https://code.google.com/p/discuz-u...
  • doegoo
  • doegoo
  • 2016-02-26 11:10
  • 2802

Spring Security3 使用中心认证服务(CAS)进行单点登录

高级CAS配置 CAS认证框架提供了高级的配置和与CAS服务的数据交换。在本节中,我们将会介绍CAS集成的高级配置。在我们觉得重要的地方将会包含相关的CAS配置指令,但是要记住的是CAS配置是很复杂的并超出了本书的范围。   从CAS  assertion中获取属性 在CAS服务...
  • jbjwpzyl3611421
  • jbjwpzyl3611421
  • 2014-01-23 11:11
  • 25255

thinkphp 二级域名站点 session共享(单点登录)

每个二级域名站点入口文件 index.php 中加入以下代码  define('DOMAIN','cdfanfan.com'); ///  cdfanfan.com 改为实际  根域名 //以下两行是为了子域名共享SESSIO...
  • peiyu_peiyu
  • peiyu_peiyu
  • 2015-12-25 16:15
  • 2276

javaWeb简单的单点登录sso实现方法

javaWeb简单的单点登录sso实现方法
  • sinat_32430939
  • sinat_32430939
  • 2017-04-17 22:53
  • 4026

实现单点登录的思路

本来是想使用cas来完成单点登录的,但是pm说php那边对cas不了解,需要花费时间去了解,还不能保证整出来。另外还需要为cas跑一个服务,太麻烦了。 我的想法是在用户登录的时候,对所有需要登录的应用发送登录请求,然后再记录每个应用的登录结果反馈后,跳转到桌面系统的桌面上,这个桌面只加载需要登...
  • xiaoxian8023
  • xiaoxian8023
  • 2014-10-27 23:33
  • 5197

单点登录讲解

什么是单点登陆 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 较大的企业内部,一般都有很多的业务支持系统为其提供相应的管理和IT服务。例...
  • lipc_
  • lipc_
  • 2016-07-26 15:34
  • 1694

shiro 单点登录原理 实例

Shiro 1.2开始提供了Jasig CAS单点登录的支持,单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个,无须多次登录。 Jasig CAS单点登录系统分为服务器端和客户端,服务器端提供单点登录,多个客户端(子系统)将跳转到该...
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2017-02-08 17:39
  • 3653

单点登录三个方法及原理:共享Session、基于OpenId的单点登录、基于Cookie的OpenId存储方案

单点登录三个方法及原理:共享Session、基于OpenId的单点登录、基于Cookie的OpenId存储方案             单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用,而在架...
  • han2529386161
  • han2529386161
  • 2016-08-21 15:07
  • 6790

单点登录原理和java实现简单的单点登录

摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中。本文从业务的角度分析了单点登录的需求和应用领域;从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面SSO的实现、源代码和详细讲解;还从安全和性能的角度对现有的实现技术进行进一步分析,指出相应的...
  • zuoluoboy
  • zuoluoboy
  • 2013-10-18 13:31
  • 58141
    个人资料
    • 访问:435535次
    • 积分:5513
    • 等级:
    • 排名:第5743名
    • 原创:157篇
    • 转载:103篇
    • 译文:1篇
    • 评论:45条
    最新评论