单点登录之,客户端

惯例:

我是温浩然:

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

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

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);
	}

}

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

时间: 2024-08-29 12:10:21

单点登录之,客户端的相关文章

CAS单点登录,客户端为weblogic,登录成功后跳转到客户端应用系统时报错

问题描述 CAS单点登录,客户端为weblogic,登录成功后跳转到客户端应用系统时报错 CAS单点登录部署在tomcat中,客户端应用中间件为weblogic.能成功进入单点登录首页并能成功登录,但是跳转到客户端应用系统(weblogic)时报下文中的错误.但是客户端应用系统中间件替换成tomcat却没有问题,能够成功跳转到系统.求高手帮忙! Error 500--Internal Server Error javax.net.ssl.SSLKeyException: FATAL Alert:

采用CAS原理构建单点登录

企业的信息化过程是一个循序渐进的过程,在企业各个业务网站逐步建设的过程中,根据各种业务信息水平的需要构建了相应的应用系统,由于这些应用系统一般是在不同的时期开发完成的,各应用系统由于功能侧重.设计方法和开发技术都有所不同,也就形成了各自独立的用户库和用户认证体系.随着新的业务网站不断的增加,用户在每个应用系统中都有独立的账号,这样就造成在访问不同的应用系统时,需要记录对应的用户名和密码,多个用户名密码极易记混,如果忘记或记错了某一个业务网站的用户名或密码就无法进行登录,耽误工作,影响工作效率,随

客户端单点登录-使用python实现客户端单点的登陆

问题描述 使用python实现客户端单点的登陆 本人采用python2.7 httplib2进行单点登录,每次获取lt以后, 使用正确的用户名+密码+lt尝试登录,但是每次都直接跳回登录页面. 服务端采用cas机制.希望大神能给出一个python httpclient单点登录的例子(代码) 解决方案 http://blog.csdn.net/feng27156/article/details/38060257 解决方案二: http://www.zuidaima.com/share/156733

《CCNP安全VPN 642-648认证考试指南(第2版)》——5.10节配置无客户端的SSL VPN的单点登录

5.10配置无客户端的SSL VPN的单点登录 CCNP安全VPN 642-648认证考试指南(第2版) 单点登录(SSO)可以解决用户在第一次成功地登录到SSL VPN后,当访问内部资源时不得不重新输入他们的登录凭证的问题.ASA在远程用户和服务器之间承当验证代理的角色以实现SSO的功能.当用户在SSL VPN的登录页面上提交他们的凭证后,ASA将账户信息发送给验证/应用程序服务器,如果验证成功的话,服务器返回一个cookie.接着ASA使用这个cookie作为用户访问被SSO服务器保护的域资

SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析

这次的收获是把PPT也深入研究了一番... 上图:一会上原理分析:(本篇不涵盖cas代理认证模式,代理目前还没用到.) 文中所有资料下载地址:在文章中最下方. 1)PPT流程图: 一.用户第一次访问web1应用. ps:上图少画了一条线,那一条线,应该再返回来一条,然后再到server端,画少了一步...谢谢提醒.而且,重定向肯定是从浏览器过去的.我写的不严谨,画的比较通俗了...因该像下面这张图一样就ok了!!PPT自己下载下来修改吧,我就不改了. 二.用户第一次访问web2应用. 困扰了好久

cas单点登录 直接进入客户端的登录验证

问题描述 cas单点登录直接进入客户端的登录验证不在进入cas提供的登录页面在一个客户端登陆后其他的客户端就不再登陆这需要怎么处理额.... 解决方案 解决方案二:修改cas的登陆流程login-webflow.xml,将要跳转的登陆页面改成自己的至于你说的"在一个客户端登陆后其他的客户端就不再登陆"cas就是干这事的

如何在Notes客户端配置与实现iNotes的单点登录

介绍 Notes Account Framework 的实现机制 Notes Account Framework 是直接使用了其底层平台 Expeditor(XPD) 封装好的的 Account Framework.XPD 的账户系统又是基于 JAAS(Java Authentication and Authorization Service framework) 的. 这种集成允许用户存储并获取一些在与本地或者远程服务创建连接和通信的属性,以及一些授权应用与服务做认证的属性. JAAS 授权认

关于cas-client单点登录客户端拦截请求和忽略/排除不需要拦截的请求URL的问题(不需要修改任何代码,只需要一个配置)

  前言:今天在网上无意间看到cas单点登录排除请求的问题,发现很多人在讨论如何通过改写AuthenticationFilter类来实现忽略/排除请求URL的功能:突发奇想搜了一下,还真蛮多人都是这么干的,原谅我是个耿直的boy,当时我笑的饭都喷出来了,只需要一个配置的问题,被你们搞的这么麻烦:虽然很想回复他们"你们这帮人用别人的东西都不看源码的吗?",转念一想,这也要怪作者不给力,文档里压根没有提到这个配置,在这里用少量篇幅讲解如何配置排除不需要拦截的请求URL,后面用大量篇幅介绍我

在Notes客户端配置与实现iNotes的单点登录

最终实现用户通过 Notes 客户 端的嵌入式浏览器单点登录 iNotes.Notes Account Framework 是直接使用了其底层平台 Expeditor(XPD) 封装好的的 Account Framework.XPD 的账户系统又是基于 JAAS(Java Authentication and Authorization Service framework) 的. 这种集成允许用户存储并 获取一些在与本地或者远程服务创建连接和通信的属性,以及一些授权应用与服务做认证的属性. JA