4.开发支持APP登录的移动服务端接口。接收APP登录请求,采用HttpClient转发至CAS认证中心登录,返回json数据解析并最终返回给客户端。本地会话采用redis维护,登录成功,返回access_token。

接口定义:url: /login.json
入参: username string
password string
出参: ret string
msg string
access_token string

核心代码如下:

作者:手插口袋_
链接:https://www.imooc.com/article/4200
来源:慕课网

https://www.imooc.com/article/4200

 @RequestMapping("/login.json")
public @ResponseBody ResultBean login(HttpServletRequest request,
HttpServletResponse response) { ResultBean resultBean = new ResultBean();
String username = request.getParameter("username");
String password = request.getParameter("password"); HttpClient httpClient = new DefaultHttpClient(); String url = SSO_SERVER_URL + "?mode=app&service=" + SSO_CLIENT_SERVICE; HttpGet httpGet = new HttpGet(url);
try{
HttpResponse httpClientResponse = httpClient.execute(httpGet);
int statusCode = httpClientResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK){
String result = EntityUtils.toString(httpClientResponse.getEntity(),
"utf-8").replace('
', ' ').replace('
', ' ').trim();
//解析json数据
ObjectMapper objectMapper = new ObjectMapper();
LtBean ltBean = objectMapper.readValue(result, LtBean.class);
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("username", username));
formparams.add(new BasicNameValuePair("password", password));
formparams.add(new BasicNameValuePair("lt", ltBean.getLt()));
formparams.add(new BasicNameValuePair("execution", ltBean.getExecution()));
formparams.add(new BasicNameValuePair("_eventId", "submit")); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
HttpPost httpPost = new HttpPost(SSO_SERVER_URL);
httpPost.setEntity(entity); httpClientResponse = httpClient.execute(httpPost);
statusCode = httpClientResponse.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK){
result = EntityUtils.toString(httpClientResponse.getEntity(), "utf-8")
.replace('
', ' ').replace('
', ' ').trim(); objectMapper = new ObjectMapper();
resultBean = objectMapper.readValue(result, ResultBean.class);
if(resultBean.getRet().equals("")){
String access_token = UUID.randomUUID().toString(); //会话句柄
TokenUtil.setAccess_token(access_token, username); //放入redis
resultBean.setRet("0");
resultBean.setMsg("登录成功");
resultBean.setAccess_token(access_token);
}
}
} }catch(Exception e){
e.printStackTrace();
resultBean.setRet("-2");
resultBean.setMsg("系统服务错误,请稍后再试!");
return resultBean;
}finally{
httpClient.getConnectionManager().shutdown();
}
return resultBean;
} 作者:手插口袋_
链接:https://www.imooc.com/article/4200
来源:慕课网

《SSO CAS单点系列》之 APP原生应用如何访问CAS认证中心的更多相关文章

  1. 【CAS单点登录视频教程】 第01集-- 认识CAS

    CAS 是什么? 目录 ----------------------------------------- [CAS单点登录视频教程] 第06集[完] -- Cas认证 学习 票据认证FormsAut ...

  2. 【CAS单点登录视频教程】 第02集 -- 安装CAS

    目录 ----------------------------------------- [CAS单点登录视频教程] 第06集[完] -- Cas认证 学习 票据认证FormsAuthenticati ...

  3. (转)《SSO CAS单点系列》之 15分钟让你了解SSO技术到底是个什么鬼!

    Web应用系统的演化总是从简单到复杂,从单功能到多功能模块再到多子系统方向发展. .当前的大中型Web互联网应用基本都是多系统组成的应用群,由多个web系统协同为用户提供服务. 多系统应用群,必然意味 ...

  4. SSO CAS 单点系列

    在多系统应用群中,使用,例如,用户账户管理,用户应该有一个统一的账户,不应该让用户在每个子系统分别注册 登陆再分别登出.这就是我们所说的单点登陆问题,即SSO: SSO问题,时大中型web应用经常碰到 ...

  5. (转)《SSO CAS单点系列》之 实现一个SSO认证服务器是这样的!

    上篇我们引入了SSO这个话题<15分钟了解SSO是个什么鬼!>.本篇我们一步步深入分析SSO实现机理,并亲自动手实现一个线上可用的SSO认证服务器!首先,我们来分析下单Web应用系统登录登 ...

  6. CAS单点登录相关配置

    一.CAS单点登录服务端的部署 部署 把CAS所对应的war包部署到tomcat中 4.品优购资源V1.3\配套软件\配套软件\CAS\cas.war 配置 更改tomcat的端口号 <Conn ...

  7. CAS学习笔记二:CAS单点登录流程

    背景 由于公司项目甲方众多,各甲方为了统一登录用户体系实现单点登录(SSO)开始要求各乙方项目对接其搭建的CAS单点登录服务,有段时间对CAS的流程很迷,各厂商还有基于CAS进行二次开发的情况,所以对 ...

  8. 【CAS单点登录视频教程】 第06集【完】 -- Cas认证 学习 票据认证FormsAuthentication

    目录 ----------------------------------------- [CAS单点登录视频教程] 第06集[完] -- Cas认证 学习 票据认证FormsAuthenticati ...

  9. 【CAS单点登录视频教程】 第05集 -- CAS服务器安装

    第一步: 下载cas 服务器 cas-server-3.5.2-release.zip 目录 ----------------------------------------- [CAS单点登录视频教 ...

随机推荐

  1. talend工具中往oracle插数据报ORA-01461: can bind a LONG value only for insert into a LONG colum

    今天使用talend往oracle插数据报ORA-01461: can bind a LONG value only for insert into a LONG column 数据源是mysql,开 ...

  2. elastic-job集成到springboot教程,和它的一个异常处理办法:Sharding item parameters '1' format error, should be int=xx,int=xx

    先说这个Sharding item parameters '1' format error, should be int=xx,int=xx异常吧,这是在做动态添加调度任务的时候出现的,网上找了一会没 ...

  3. 记录心得-shiro框架demo示例

    从懵懂到了解,再到熟悉,是一个进步的过程! 先撸代码,跑起来看效果,再做详细的介绍,开始干活! 1,先列出工程目录结构,自己需要创建对应层级的程序和相关配置文件. 2,导入maven依赖的jar包.打 ...

  4. html5 css练习浮动布局

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  5. 编译jmeter5.0源码

    jmeter5.0使用过程中,遇到request或者response乱码的情况,想要一次性解决这个问题,需要编译ApacheJMeter_http.jar这个包(lib\ext文件下)里的Reques ...

  6. FREERTOS学习笔记

    2012-02-25 21:43:40 为提升自己对实时操作系统(RTOS)的认识,我学习了freeRTOS. 理解了OS任务的状态.优先级的概念.信号量的概念.互斥的概念.队列.内存管理.这都是和R ...

  7. Liunx中三种网络模式配置及Xshell连接

    Liunx网络配置 NAT模式下的网络配置: 首先打开网络配置文件:vi   /etc/sysconfig/network-scripts/ifcfg-ens33 修改网卡信息,配置动态Ip过程中,只 ...

  8. Pytrhon结束死循环的子线程

    Python在子线程无线循环的过程中,如果直接ctrl+c结束程序的话,虽然程序可以结束,但是会导致子线程资源无法回收,一般情况不会有太大影响,但是使用TCP通信的时候,子线程是占用特定的端口的,在资 ...

  9. VMware centos7 如何配置静态ip并且可上网

    注:此贴使用NAT方式配置上网模式. 1.设置虚拟机的网络适配器为NAT模式: 2.修改VMware的“虚拟网络编辑器”: 打开后选择NAT模式,勾选,然后点击NAT设置: NAT默认设置了188网段 ...

  10. selenium + python + nwjs

    1.下载chromedriver文件 http://chromedriver.storage.googleapis.com/index.html google官方下载地址 http://dl.nwjs ...