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. 【论文速读】Lianwen_Jin_CVPR2017_Deep_Matching_Prior_Network_Toward_Tighter_Multi-oriented_Text_Detection

    Lianwen_Jin_CVPR2017_Deep_Matching_Prior_Network_Toward_Tighter_Multi-oriented_Text_Detection 作者 关键词 ...

  2. SpringBoot 注解

    @RestController和@RequestMapping注解 我们的Example类上使用的第一个注解是 @RestController .这被称为一个构造型(stereotype)注解.它为阅 ...

  3. ngx-admin with Asp.net Core 2.0, possibly plus OrchardCore

    1 Download ngx-admin from https://github.com/akveo/ngx-admin 2 Create a new Web Application in vs201 ...

  4. Azure上搭建ActiveMQ集群-基于ZooKeeper配置ActiveMQ高可用性集群

    ActiveMQ从5.9.0版本开始,集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper+LevelDB的实现方式. 本文主要介绍了在Windows环境下配置基于Zoo ...

  5. C++ this指针的详解

    C++中this指针的用法详解   转自:http://blog.chinaunix.net/uid-21411227-id-1826942.html 1. this指针的用处: 一个对象的this指 ...

  6. Mysql查询创建和导入操作

    如何安装: https://www.cnblogs.com/bigbrotherer/p/7241845.html 登录: mysql -uroot -p 输入密码:xxxx 显示当前数据库: sho ...

  7. ORA-08176 错误的一个案例

    在演示事务的read only mode 的时候,因为一个错误有了这个意外的收获.场景是这样的: 在session 1 中执行了如下的语句. SQL> set transaction read ...

  8. python多态和规范

    python规范(接口类) 接口类可以规范代码,但接口类本身是不实现的 class Payment: def pay(self,money): raise Notlmplemented class W ...

  9. [c/c++] programming之路(31)、位运算(二)

    一.取反的高级用法 #include<stdio.h> #include<stdlib.h> //取反的作用:末位清零 取反适用于各种位数不同的数据 void main0(){ ...

  10. 使用kubesql进行kubernetes资源查询

    kubesql kubesql(https://github.com/xuxinkun/kubesql)是我最近开发的一个使用sql查询kubernetes资源的工具.诸如node,pod等kuber ...