シングルポイント登録3


ログイン時には、クライアントだけでなくサーバー側も完全な登録項目です.
前の二つの編を通して分かるように、私のアーキテクチャはspringのMVCとspring注釈を使っていますが、実は全然分かりません.
以下はログイン方法のコードで、ローカルログインとクライアントのログインの2種類があります.
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の対象に転化しますか?
この二つの問題は他の二つの文章を見ましょう.
著作権声明:本文はブロガーのオリジナル文章で、ブロガーの許可なしに転載してはいけません.