关闭

单点登录之,客户端

标签: DefaultHttpClient
308人阅读 评论(0) 收藏 举报
分类:

惯例:

我是温浩然:

单点登录的客户端配置,客户端不直接操作数据库,而是与其他项目相结合,对浏览器进行操作。

下面贴登录中,客户端的代码。

package com.tujia.tuuser.controller;

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

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

import net.sf.json.JSONObject;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
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 com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.tujia.corelogin.security.SecurityUtil;
import com.tujia.tucommon.config.ResultCode;
import com.tujia.tucommon.controller.BaseController;
import com.tujia.tuuser.entity.User;

@Controller
public class UserLoginController extends BaseController {

	@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";
    }
	
	//没有权限访问此请求
	@RequestMapping(value = "/noauthority", produces = "text/html")
    public String noAuthority(Model model,HttpServletRequest request, HttpServletResponse response) {
    	
    	return "noAuthority";
    }
	
	/**
	 * 退出接口
	 */
	@RequestMapping(value = "/tulogout",method =RequestMethod.POST)
	public void logout(
			HttpServletRequest request, HttpServletResponse response) {
		ResultCode resultCode = ResultCode.SUCCEED;
		securityUtil.logout(request, response);
		Object result = null;
		setResponse(response, resultCode, result);
	}
	
	@RequestMapping(value = "/tulogin")
	public void login(HttpServletRequest request,
			HttpServletResponse response,@RequestBody Map<String, Object> map){
		
		Object resultCode = ResultCode.SUCCEED;
		Object result = null;
		securityUtil.requrl(request,response);
		String phone = (String) map.get("phone");
		String password = (String) map.get("password");
		String requrl = request.getRequestURI();
		
		
		DefaultHttpClient httpClient = new DefaultHttpClient();
		HttpPost method = new HttpPost("http://localhost:8080/tu-login/tuloginMethod");

		JSONObject jsonParam = new JSONObject();
		jsonParam.put("phone", phone);
		jsonParam.put("password", password);
		jsonParam.put("requrl", requrl);

		StringEntity entity = new StringEntity(jsonParam.toString(), "utf-8");
		entity.setContentEncoding("UTF-8");
		entity.setContentType("application/json");
		method.setEntity(entity);
		
		HttpResponse resGet;
		try {
			//通过DefaultHttpClient 来获得返回的参数(值)
			resGet = httpClient.execute(method);
			//将返回值设置编码格式,(避免乱码)
			String resData = EntityUtils.toString(resGet.getEntity(),"utf-8");
			//通过net.sf.json.JSONObject 来解析字符串
			JSONObject resJSON = JSONObject.fromObject(resData);
			//把json中的user对象获取,并强转。
			Object userjson = resJSON.get("user");
			String userString = userjson.toString();
			
			//通过com.google.gson.Gson 来处理json 类型的user对象。
			Gson gson = new Gson();
			
			//user就是转换后的对象。

			//在这里,我对com.google.gson.JsonObject有点疑问,为啥这个不能解析返回的字符串呢?
			//这个类有什么作用?
			JsonObject jsonObj = new JsonObject();
			jsonObj.getAsJsonObject(resData);
		
			if("A00000".equals(resJSON.get("code"))){
				User user = gson.fromJson((String) userString, User.class);
				String token = (String)resJSON.get("token");
				securityUtil.addCookieToken(request,response,token,user.getId());
				request.getSession().setAttribute("user", user);
			}
			
			
			if ( !"A00000".equals(resJSON.get("code"))) {
				result = resJSON.get("data");
			}else{
			result = securityUtil.getReqURL(request,response);
			}
			
			
			resultCode = resJSON.get("code");
		} catch (ClassCastException e) {
			logger.error(e.getMessage());
			resultCode = ResultCode.INTERNAL_ERROR;
			result = e.getMessage();
		}catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		setResponse(response, resultCode, result);
	}
	
}

在这里面,比较难的就是,与服务器交互的这一段代码,反正我以前是没听过没用过。其他的地方,没有什么难的了。再就是其他的一些具体的需求了。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:249718次
    • 积分:4021
    • 等级:
    • 排名:第7761名
    • 原创:154篇
    • 转载:101篇
    • 译文:1篇
    • 评论:33条
    最新评论