• 服务端提供了两个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. August 24th 2016 Week 35th Wednesday

    Storms make trees take deeper roots. 暴风雨能使大树的根扎得更深. If the trees already have deep roots, then the s ...

  2. 3ds max移除几何体的线段

    将几何体转化成可编辑多边形,然后选中线段,调出上图的模式,然后选中删除.

  3. grep(Global Regular Expression Print)

    .grep -iwr --color 'hellp' /home/weblogic/demo 或者 grep -iw --color 'hellp' /home/weblogic/demo/* (-i ...

  4. solrconfig.xml和schema.xml说明

    1.   solrconfig.xml solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置. 1.1.  datadir节点 ...

  5. Git命令之从GitHub上下载开源项目

    1,先在本地创建一个目录,作为本地仓库,如: 2,使用Git init 初始化仓库,git初始化完成后,会生成一个隐藏的git文件如: 3,clone Git项目,如: 4,这个项目就是合Github ...

  6. 根据复选框checkbox的选中状态来打开或关闭隐藏层

    HTML:  <input type="checkbox" id="check-expert"> <div id="expert&q ...

  7. SQL 映射的 XML 文件

    MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方. 对于所有的力量, SQL映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大 ...

  8. windows服务 2.实时刷新App.config

    参考 http://www.cnblogs.com/jeffwongishandsome/archive/2011/04/24/2026381.html http://www.cnblogs.com/ ...

  9. LeetCode之Binary Tree Level Order Traversal 层序遍历二叉树

    Binary Tree Level Order Traversal 题目描述: Given a binary tree, return the level order traversal of its ...

  10. SQL——触发器——插入触发器——边学边项目写的。

    需求: 项目表项目编码触发器编写 为项目表DwProject编写触发器,目的为当创建新项目时,且ProjectNo 为Null或空字符串时,自动创建项目编号,编号格式为4位年号,2位月份,2位顺序号, ...