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

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

    cas 单点登录 解决方案.

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

    单点登录系统

    单点登录 单点登录 单点登录 单点登录 单点登录 单点登录 单点登录 单点登录 单点登录 单点登录

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

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

    sso单点登录ppt.ppt

    sso单点登录ppt.ppt

    宁盾单点登录(SSO)与致远A8对接方案.pdf

    宁盾单点登录(SSO)与致远A8对接方案.pdf宁盾单点登录(SSO)与致远A8对接方案.pdf宁盾单点登录(SSO)与致远A8对接方案.pdf宁盾单点登录(SSO)与致远A8对接方案.pdf宁盾单点登录(SSO)与致远A8对接方案.pdf宁盾单点登录...

    单点登录demo

    单点登录

    NC6.5单点登录源码

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

    exchange邮件系统单点登录整合

    exchange邮件系统单点登录整合,单点登录相关设置,支持IE8以上浏览器

    单点登录解决方案单点登录解决方案

    单点登录解决方案单点登录解决方案单点登录解决方案单点登录解决方案

    漂亮的单点登录网页模版

    漂亮的单点登录网页模版

    Spring+LDAP实现单点登录

    去掉JAR包了。Spring+LDAP实现单点登录SSO 单点登录 LDAP SPRING

    openmeetings实现简单的单点登录(自动登录)

    openmeetings实现简单的单点登录(自动登录) openmeetings实现简单的单点登录(自动登录)

    单点登录系统(CS程序)

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

    跨域单点登录

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

    powerBI单点登录

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

    JAVA单点登录的实现

    1,通过session会话来判断 2,实现单点登录

    NC6单点登录方案

    NCV61-单点登录方案, NC系统提供了一个Servlet来注册用户登录信息。访问该servlet的URL格式基本为: http://host:port/service/ssoRegServlet,其后面可以跟随多个参数

    简单实现web单点登录

    简单实现web单点登录,使用J2EE技术(servlet/jsp/),使用filter拦截请求,cookie保存用户登陆信息

    SSO单点登录

    ASP.NET跨域单点登录源码 asp.net 跨域单点登录实现原理: 当用户第一次访问web应用系统1的时候,因为还没有登录,会被引导到认证中心进行登录; 根据用户提供的登录信息,认证系统进行身份效验,如果 通过效验,...

Global site tag (gtag.js) - Google Analytics