单点登录之,客户端

标签: DefaultHttpClient
452人阅读 评论(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);
	}
	
}

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

---===HTML帮助文件的制作和使用(new)===---

                              HTML帮助文件的制作和使用   HTML Help Workshop 已经不是新鲜的东西,它取代了功能很强但看起来比较普通的 Help W...
  • coolstar
  • coolstar
  • 2001-05-04 17:14:00
  • 2527

单点登录CAS7-客户端配置单点登录

原理 这里用的是:cas-client-core-3.4.0.jar(2015-07-21发布的) 下载地址为:http://mvnrepository.com/artifact/org....
  • bitree1
  • bitree1
  • 2017-02-15 17:09:49
  • 740

单点登陆_配置客户端与服务器端

单点登录实现方式 运营中心系统采用Cas(全称是Centeral Authentication Service)作为单点登录SSO(Single Sign On)的实现方式。其由Cas Se...
  • wwww_com
  • wwww_com
  • 2016-09-20 16:47:10
  • 823

CAS单点登录源码解析之【客户端】

前期准备: 1.cas-client-core-3.2.1.jar 2.cas-client-3.2.1-release.zip 3.应用系统webapp(http://127.0.0.1:8090/...
  • dovejing
  • dovejing
  • 2015-03-18 22:30:07
  • 4576

不同.net版本实现单点登录

所谓单点登录(Single Sign On就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。其实对于程序员在技术上要实现就得就是多个不同域名间共享cookie的问题。    ...
  • zjlovety
  • zjlovety
  • 2015-08-13 17:25:31
  • 313

基于CAS的单点登录SSO[4]: 加入两个CAS客户端测试单点登录

基于CAS的单点登录SSO[4]: 加入两个CAS客户端测试单点登录 作者:家辉,日期:2017-08-22 CSDN博客: http://blog.csdn.net/gobitan 摘要:本...
  • gobitan
  • gobitan
  • 2017-08-29 23:59:14
  • 696

单点登录学习(3)CAS客户端配置

上一节中介绍了CAS服务器端的配置,服务已经run起来了,接下来就新建另一个web工程,该工程通过先前的CAS Server统一认证 客户端的配置主要是4个filter配置 1.Authentic...
  • CrazyCoder2010
  • CrazyCoder2010
  • 2011-08-16 21:34:02
  • 6059

CAS单点登录服务端与客户端配置

(一) CAS单点登录 : 服务端搭建 1.下载 先在网上下载cas-server-3.5.2,将里面的cas-server-webapp-3.5.2.war放到tomcat的webapps目录下。 ...
  • qq_29058811
  • qq_29058811
  • 2017-05-17 16:45:15
  • 1322

单点登录CAS使用记(二):部署CAS服务器以及客户端

CAS-Server下载地址:https://www.apereo.org/projects/cas/download-cas CAS-Client下载地址:http://developer.jas...
  • qq_33732975
  • qq_33732975
  • 2017-05-02 10:34:57
  • 443

CAS单点登录三-客户端获取登录信息

通过上篇的配置,登录是从数据库中进行验证了。http://blog.csdn.net/redstarofsleep/article/details/51144809那么现在要解决的问题是,客户端怎么知...
  • redstarofsleep
  • redstarofsleep
  • 2016-04-13 17:34:05
  • 6474
    个人资料
    持之以恒
    等级:
    访问量: 49万+
    积分: 5997
    排名: 5306
    最新评论