• 服务端提供了两个api:

一个是用于用户认证,因为要传输密钥,所以用了https方式  如何在服务端配置https请见另外一个博文

https://192.168.1.190:8443/api/auth      参数api_key=***&secret_key=***  [post 方式提交]

另外一个api,普通的http api,只有当通过第一个api的认证后,服务器下发一个cookie,之后的请求带上cookie,才能访问到内部页面,当然cookie对应的session定期失效。

http://192.168.1.190:8081/api/inner      [get 方式提交]

  • 下面是客户端(shell)部分:
[root@centos shell]# curl -v --insecure -d "api_key=test&secret_key=test" https://192.168.1.190:8443/api/auth
* About to connect() to 192.168.1.190 port (#0)
* Trying 192.168.1.190... connected
* Connected to 192.168.1.190 (192.168.1.190) port (#0)
* Initializing NSS with certpath: /etc/pki/nssdb
* warning: ignoring value of ssl.verifyhost
* skipping SSL peer certificate verification
* SSL connection using TLS_DHE_RSA_WITH_AES_256_CBC_SHA
* Server certificate:
* subject: CN=free4lab,OU=free4lab,O=free4lab,L=beijing,ST=beijing,C=CN
* start date: 10月 :: GMT
* expire date: 1月 :: GMT
* common name: free4lab
* issuer: CN=free4lab,OU=free4lab,O=free4lab,L=beijing,ST=beijing,C=CN
> POST /api/auth HTTP/1.1
> User-Agent: curl/7.19. (i686-pc-linux-gnu) libcurl/7.19. NSS/3.12.7.0 zlib/1.2. libidn/1.18 libssh2/1.2.
> Host: 192.168.1.190:
> Accept: */*
> Content-Length:
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 OK
< Server: Apache-Coyote/1.1
< Set-Cookie: JSESSIONID=84AB6E3414D8E639959745CBA5DA448F; Path=/; Secure
< Set-Cookie: login_cookie=c7be27c2-fe79-4772-ae2b-dae485da47d8; Expires=Sat, -Nov- :: GMT
< Content-Type: text/html;charset=UTF-
< Content-Length:
< Date: Sat, Oct :: GMT
<
* Connection #0 to host 192.168.1.190 left intact
* Closing connection #
{"message":"Login succeeded!","status":0,"value":""}

可以看见,我提供正确的api_key和secret_key后,服务端发回两个cookie并且返回json,提示认证成功。

其中: JSESSIONID是用来定位服务端的session的,简单的说,客户端发送http请求时,只有在cookie里带上了正确的JSESSIONNID,java后端  HttpSession session = request.getSession(); 这样的语句才能获取到与之对应的session信息。

所以之后的请求我就都带上以上两个cookie信息即可!

[root@centos shell]# curl -v  --cookie "login_cookie=c7be27c2-fe79-4772-ae2b-dae485da47d8;JSESSIONID=84AB6E3414D8E639959745CBA5DA448F" http://192.168.1.190:8081/api/inner
* About to connect() to 192.168.1.190 port (#0)
* Trying 192.168.1.190... connected
* Connected to 192.168.1.190 (192.168.1.190) port (#0)
> GET /api/inner HTTP/1.1
> User-Agent: curl/7.19. (i686-pc-linux-gnu) libcurl/7.19. NSS/3.12.7.0 zlib/1.2. libidn/1.18 libssh2/1.2.
> Host: 192.168.1.190:
> Accept: */*
> Cookie: login_cookie=c7be27c2-fe79--ae2b-dae485da47d8;JSESSIONID=84AB6E3414D8E639959745CBA5DA448F
>
< HTTP/1.1 OK
< Server: Apache-Coyote/1.1
< Content-Length:
< Date: Sat, Oct :: GMT
<
* Connection #0 to host 192.168.1.190 left intact
* Closing connection #
{"message":"authentication succeeded!","status":0,"value":"welcome to home page"}

这样,我们就用shell脚本实现了https的登录!

  • 用浏览器登录就很简单了,随便写一个html的post代码
<form action="https://localhost:8443/api/auth" method="post">
<p>First name: <input type="text" name="api_key" /></p>
<p>Last name: <input type="text" name="secret_key" /></p>
<input type="submit" value="Submit" />
</form>

然后输入api_key和secret_key就认证完成了

shell实现https登录的更多相关文章

  1. Linux登录shell和非登录(交互式shell)环境变量配置

    使用Jenkins执行shell脚本的时候, 碰到command not found. 比如java mvn, 这些环境变量配置在/etc/profile 中, 但jenkins执行的时候并没有加载. ...

  2. Qt之HTTPS登录

    简述 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP ...

  3. 交互式shell和非交互式shell、登录shell和非登录shell的区别

    交互式shell和非交互式shell.登录shell和非登录shell的区别.首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录. 交互式shell和非交互式shell(intera ...

  4. Qt之HTTPS登录(集成QNetworkAccessManager提前修改QSslConfiguration,然后post)

    简述 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP ...

  5. (HTTPS)-tomcat 实现 https 登录,去掉端口号

    最近项目组要给日本客户做个产品,升级服务器交由我来升级.为了测试用,想要在自己电脑上搭个服务器. 服务器需要由https登录,并且不显示端口号. 费了些劲儿,看了n多帖子,好不容易弄好了.趁在没忘记之 ...

  6. GS使用HTTPS登录的设置过程

    1. Windows 增加角色服务 服务器配置管理器, 添加角色服务 增加角色功能里面有: 证书颁发机构 证书颁发机构 web注册 2. AD CS配置 主要是next操作 独立ca 根证书 等 3. ...

  7. Shell学习——Shell分类:登录shell和非登陆shell 交互shell和非交互shell

    1.从两个不同维度来划分,是否交互式,是否登录 2.交互式shell和非交互式shell 交互式模式:在终端上执行,shell等待你的输入,并且立即执行你提交的命令.这种模式被称作交互式是因为shel ...

  8. 登录shell与非登录shell读取文件过程

    登录shell与非登录shell读取文件过程登录:/etc/profile→/etc/profile.d/*.sh        ~/.bash_profile非登录:~/.bash_profile→ ...

  9. silverlight开发实例(Prism+MVVM+RIA)(二)--创建shell及用户登录

    在上篇基本说清了本项目的基本框架,下面开始说下项目的加载和shell.开始之前在建立EF时出现了一个问题,我在数据库中建立了视图,而在EF导入视图时出现因无法匹配主键导致无法导入视图的问题,检查发现是 ...

随机推荐

  1. 解决Windows10下80端口被PID为4的System占用的问题

    一.背景 最近由于好奇心,更新了windows10系统,感觉上手还蛮快,而且体验还不错,但是在IDEA中做开发时,使用80端口进行启动项目的时候发现端口被占用了,于是尝试解决这个问题.具体步骤如下,分 ...

  2. [Android Pro] AIDL进程间传递自定义类型参数

    1.创建.aidl 文件 AIDL 语法简单,用来声明接口,其中的方法接收参数和返回值,但是参数和返回值的类型是有约束的,且有些类型是需要 import,另外一些则无需这样做. AIDL 支持的数据类 ...

  3. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(六) 之 Layim源码改造右键菜单--好友、组管理功能的实现。

    前言 上一篇中讲解了加好友的流程,本篇将介绍好友管理,群组管理的右键菜单功能.当然由于菜单项目太多,都实现也得花费时间.只讲解一下我是如何从不知道怎么实现右键菜单到会自定义菜单的一个过程.另外呢,针对 ...

  4. poj 1837

    题目链接:http://poj.org/problem?id=1837 题目大意: 有一个天平,左臂右臂各长15,然后给出n,m,n代表有几个挂钩,挂钩给出负数代表在左臂的距离,正数则在右臂m代表有m ...

  5. AIX性能监控

    http://www.ibm.com/developerworks/cn/aix/library/au-aix7memoryoptimize2/ http://www.aixchina.net/Art ...

  6. devices-list

    转自:https://www.kernel.org/pub/linux/docs/lanana/device-list/devices-2.6.txt LINUX ALLOCATED DEVICES ...

  7. 常用的数据统计Sql 总结(转)

    转:http://www.cnblogs.com/zhangweizhong/p/5577842.html 最近刚在搞一个BI的项目,里面需要大量的sql 数据统计相关运用,加深了我又对SQL的理解与 ...

  8. python多线程之Event(事件)

    #!/usr/bin/env python # -*- coding: utf-8 -*- import time from threading import Thread, Event import ...

  9. 攻城狮在路上(壹) Hibernate(六)--- 通过Hibernate操纵对象(上)

    一.Hibernate缓存简介: Session接口是Hibernate向应用程序提供的操纵数据接口的最主要接口,它提供了基本的保存.更新.删除和加载Java对象的方法. Session具有一个缓存, ...

  10. JqueryEasyUI 解决IE下datagrid无法刷新的问题 分类: JavaScript JqueryEasyUI 2014-09-20 10:05 510人阅读 评论(1) 收藏

    问题描述: 在使用JqueryEasyUI 时,发现在IE下$('#table').datagrid('reload');无效,数据并没有被刷新,究其原因,是因为刷新时,datagrid请求的url没 ...