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

单点登录之,客户端

 
阅读更多

惯例:

我是温浩然:

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

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

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

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

相关推荐

    cas单点登录服务端+客户端demo

    在"cas单点登录服务端+客户端demo"中,我们可以看到以下几个关键知识点: 1. **单点登录(SSO)**:SSO允许用户在一次登录后,能够无感知地在各个关联应用间切换,无需重新验证身份。它简化了用户的登录流程,提高...

    CAS单点登录例子,包含服务端和客户端

    综上所述,这个压缩包提供了一个完整的CAS单点登录实例,包括服务端和客户端的实现,可以帮助开发者理解并部署自己的CAS系统。通过深入研究和实践,你可以掌握如何利用CAS实现Web应用的安全、便捷的单点登录功能。

    SSO单点登录客户端

    下面将详细阐述SSO单点登录客户端的相关知识点。 1. SSO原理: SSO的核心在于共享用户认证信息。当用户在SSO环境中首次登录一个应用(称为服务提供者或SP)时,会通过身份验证服务器(称为身份提供者或IDP)进行...

    cas实现jira等系统单点登录的客户端jar包

    标题 "cas实现jira等系统单点登录的客户端jar包" 涉及到的是一个用于集成CAS(Central Authentication Service)服务的客户端组件,目的是实现包括JIRA在内的多个系统的单点登录(Single Sign-On, SSO)。单点登录是...

    单点登录CAS.net客户端源码

    本资源“单点登录CAS.net客户端源码”提供了实现CAS协议的.NET客户端源代码,适用于.NET框架的项目。 首先,我们需要理解CAS的基本工作流程。当用户尝试访问一个受CAS保护的资源时,会被重定向到CAS服务器进行身份...

    单点登录资料(含客户端jar)

    单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。CAS(Central Authentication Service)是实现SSO的一种开源协议,它为各种应用...

    单点登录客户端代码

    单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后,可以在多个相互关联的应用系统中自由切换,而无需再次进行身份验证。这大大提升了用户体验,减少了频繁输入用户名和密码的繁琐步骤...

    cas单点登录 客户端

    在"cas单点登录 客户端"这个主题下,我们将深入探讨CAS SSO的工作原理,客户端配置,以及相关的组件。 首先,CAS的核心功能是在用户访问受保护的应用时提供统一的身份验证服务。用户只需要登录一次,就能访问所有...

    nc63、nc65单点登录方案

    nc63及nc65版本中的单点登录方案主要通过在服务器端注册用户信息并在客户端使用特定的URL参数来实现无缝登录。该方案不仅简化了用户的登录过程,还增强了系统的安全性和可用性。通过对注册用户信息、登录流程以及...

    cas-client3.5单点登录官方客户端程序demo

    在这个"cas-client3.5单点登录官方客户端程序demo"中,我们可以深入理解如何在Java环境中集成CAS客户端来实现单点登录功能。 首先,CAS客户端3.5是为Java应用程序设计的,它允许这些应用与CAS服务器进行通信,验证...

    cas单点登录客户端--c++版

    CAS(Central Authentication Service...以上就是构建CAS单点登录客户端C++版所需的主要技术点。在实际开发过程中,开发者还需要关注代码的可读性、可维护性和安全性,遵循良好的编程规范,以保证项目的长期稳定运行。

    cas实现单点登录服务端及客户端

    CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,SSO)框架,由耶鲁大学开发并维护。SSO允许用户通过一次登录验证就能访问多个应用系统,无需在每个系统之间单独进行...

    SSO之CAS单点登录客户端服务端jar包

    在"SSO之CAS单点登录客户端服务端jar包"中,包含的是实现CAS单点登录功能所需的客户端和服务端组件。这些jar包包含了以下关键知识点: 1. **CAS服务器**:这是整个SSO架构的核心,负责处理用户的登录请求,验证凭证...

    单点登录cas服务器demo及springboot客户端demo

    总结起来,这个"单点登录cas服务器demo及springboot客户端demo"项目提供了一个实践单点登录概念的实例,涵盖了CAS服务器的搭建、Spring Boot应用的CAS客户端集成,以及Shiro或Pac4j的使用。对于想要学习和理解SSO...

    JEECG 单点登录说明文档

    JEECG智能开发平台的单点登录(SSO)功能是通过集成Kisso实现的,Kisso是一个轻量级Java权限框架,它利用加密会话cookie机制来实现单点登录服务。单点登录是一种用户登录认证方法,允许用户在多个应用系统中,只通过...

    cas客户端集成单点登录代码3

    在本文中,我们将深入探讨如何进行CAS客户端集成,以实现单点登录的登录登出功能。 单点登录允许用户在访问多个相互信任的应用系统时只需登录一次,后续访问其他系统时无需再次输入凭证。CAS作为SSO的核心组件,...

    cas客户端集成单点登录代码

    在本文中,我们将深入探讨如何将CAS客户端集成到您的应用程序中,实现单点登录功能。 首先,理解CAS的基本工作原理是至关重要的。CAS服务器作为一个中心认证服务,用户只需在该服务器上进行一次身份验证,之后便...

    跨bs和cs单点登录业务流程方案梳理(已按其在项目中实现).doc

    单点登录(Single Sign-On, SSO)是一种网络身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。在这个特定的业务流程中,平台包括基于浏览器的B/S(Browser/Server)端和基于...

    Node.js-简单可拓展的单点登录客户端中间件支持koa2或express

    **Node.js 单点登录(Single Sign-On, SSO)客户端中间件** 在现代Web应用程序中,单点登录(SSO)是一种常见的身份验证机制,它允许用户在一个应用系统中登录后,无需再次输入凭证即可访问其他关联的应用系统。...

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

    单点登录(Single Sign-On,简称SSO)是一种身份验证技术,它允许用户在通过一次登录验证后,无须再次输入凭证即可访问多个相互关联的应用系统。这一技术大大提升了用户体验,减少了用户记忆和输入多个密码的负担,...

Global site tag (gtag.js) - Google Analytics