《SSO CAS单点系列》之 APP原生应用如何访问CAS认证中心
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认证中心的更多相关文章
- 【CAS单点登录视频教程】 第01集-- 认识CAS
CAS 是什么? 目录 ----------------------------------------- [CAS单点登录视频教程] 第06集[完] -- Cas认证 学习 票据认证FormsAut ...
- 【CAS单点登录视频教程】 第02集 -- 安装CAS
目录 ----------------------------------------- [CAS单点登录视频教程] 第06集[完] -- Cas认证 学习 票据认证FormsAuthenticati ...
- (转)《SSO CAS单点系列》之 15分钟让你了解SSO技术到底是个什么鬼!
Web应用系统的演化总是从简单到复杂,从单功能到多功能模块再到多子系统方向发展. .当前的大中型Web互联网应用基本都是多系统组成的应用群,由多个web系统协同为用户提供服务. 多系统应用群,必然意味 ...
- SSO CAS 单点系列
在多系统应用群中,使用,例如,用户账户管理,用户应该有一个统一的账户,不应该让用户在每个子系统分别注册 登陆再分别登出.这就是我们所说的单点登陆问题,即SSO: SSO问题,时大中型web应用经常碰到 ...
- (转)《SSO CAS单点系列》之 实现一个SSO认证服务器是这样的!
上篇我们引入了SSO这个话题<15分钟了解SSO是个什么鬼!>.本篇我们一步步深入分析SSO实现机理,并亲自动手实现一个线上可用的SSO认证服务器!首先,我们来分析下单Web应用系统登录登 ...
- CAS单点登录相关配置
一.CAS单点登录服务端的部署 部署 把CAS所对应的war包部署到tomcat中 4.品优购资源V1.3\配套软件\配套软件\CAS\cas.war 配置 更改tomcat的端口号 <Conn ...
- CAS学习笔记二:CAS单点登录流程
背景 由于公司项目甲方众多,各甲方为了统一登录用户体系实现单点登录(SSO)开始要求各乙方项目对接其搭建的CAS单点登录服务,有段时间对CAS的流程很迷,各厂商还有基于CAS进行二次开发的情况,所以对 ...
- 【CAS单点登录视频教程】 第06集【完】 -- Cas认证 学习 票据认证FormsAuthentication
目录 ----------------------------------------- [CAS单点登录视频教程] 第06集[完] -- Cas认证 学习 票据认证FormsAuthenticati ...
- 【CAS单点登录视频教程】 第05集 -- CAS服务器安装
第一步: 下载cas 服务器 cas-server-3.5.2-release.zip 目录 ----------------------------------------- [CAS单点登录视频教 ...
随机推荐
- 水管工游戏——dfs
问题描述: 水管工游戏是指如下图中的矩阵中,一共有两种管道,一个是直的,一个是弯的,所有管道都可以自由旋转,最终就是要连通入水口可出水口.其中的树为障碍物. 方案: 输入格式:输入的第一行为两个整数N ...
- Python之jinja2
jinja2简介 python的模板引擎,设计思想来自与django的模板引擎,和其非常相似 pip install jinjia2 pip install MakeupSafe #模块加载 from ...
- redis命令行操作
打开shell,首先开启redis服务,在保证服务开启的情况下,打开客户端. 然后可以根据文档,进行命令行试验.
- platform怎么实现数据数据和驱动分离
一些重要的结构体: struct platform_device { const char * name; int id; struct device dev; u32 num_resources; ...
- phpcms公共函数库 总结
* global.func.php 公共函数库 /** * 返回经addslashes处理过的字符串或数组 * @param $string 需要处理的字符串或数组 * @return mixed ...
- sql语句中select……as的用法
- 打return
var zz=xx(); alert(zz); zz=yy(); alert(zz); function xx(){ var i=1,j=2; return i+j; } function yy(){ ...
- shell的打印菜单
#!/bash/bin cat << EOF #EOF是变量,可随便设置,但标准是EOF 1)hello world. 2)你好,世界. EOF
- flutter-fluro
路由传参 route.dart import 'package:fluro/fluro.dart'; //添加页面 import 'package:m/pages/loginPage.dart'; i ...
- MySQL5.7 JSON类型及其相关函数的学习
mysql> CREATE TABLE `json_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `info` json NOT NULL, PR ...