获取HttpServletRequest中的ip地址和body中的请求数据

获取HttpServletRequest中的ip地址和body中的请求数据,第1张

获取ip地址的方法:

String ip = requestgetHeader("x-forwarded-for");

    if(ip == null || iplength() == 0 || "unknown"equalsIgnoreCase(ip)) {       

    ip = requestgetHeader("Proxy-Client-IP");       

    }   

    if(ip == null || iplength() == 0 || "unknown"equalsIgnoreCase(ip)) {       

        ip = requestgetHeader("WL-Proxy-Client-IP");       

    }       

    if(ip == null || iplength() == 0 || "unknown"equalsIgnoreCase(ip)) {       

        ip = requestgetRemoteAddr();       

    } 

获取body请求体中的数据的方法:

用io去读

BufferedReader reader = requestgetReader();

    String str, wholeStr ="";

    while((str = readerreadLine()) != null){

    wholeStr += str;

    }

    JSONObject params = new JSONObject()parseObject(wholeStr);

然后paramsget("xx")就可以直接获取参数了  当然请求体中的数据得是json格式

以点到面,知道了web中getContextPath()这种获取路径的方式,显然其他的方式的是可以以此类推的。常说,工作学习找共同点嘛。       上一段我们也提高getContextPath()的含义,是jsp中获取路径的一种方式,返回当前页面所在的应用的名字。知其然知其所以然,知道它大体上的含义,看看在项目中是如何使用的

String path = requestgetContextPath(); 

 String basePath = requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort()+path+"/";">  

在程序中我们一般这样使用。说到了这里,我们可以看看request常用的方法:

       requestgetSchema(),返回的是当前连接使用的协议,一般应用返回的是>

最近看了一篇关于csrf机制的文章,觉得很有收获,所以自己总结了一下与大家分享

首先我们要理解一个概念,要从三个方面入手,即是什么?为什么?怎么做?

一、CSRF是什么?

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。(出自百度百科)

二、CSRF机制是什么?

CSRF验证机制是为了预防CSRF攻击而创立的,它的具体验证方法是:从cookie中获取一个csrf_token的值,再从请求体中获取一个csrf_token的值,二者进行比较,如果两个值相同则验证通过。如果两个值不同,则验证失败,拒绝请求。

三、为什么要用CSRF机制?

       首先我们通过一个案例来了解CSRF的危害:如下图所示,假设用户通过浏览器访问一个银行网站时,浏览器会将cookie中的用户信息发给银行网站,然后用户在银行网站上进行转账 *** 作,网站就接收到用户的POST请求和请求体中的信息,包括转账人和转账金额等。

        这是正常的请求流程,但有些黑客网站会伪造成银行网站(使用相似的域名或IP地址)当用户误点进黑客网站后,黑客网站就会获取到用户的cookie信息,这样他就可以伪造一个转账POST请求发给真正的银行网站,而银行并不知道这个请求是伪造的,就会造成危害和损失。

                                                            图1:未开启csrf防护机制的情况

        上面是没有使用csrf防护机制的情况,如果使用了csrf机制,我们在cookie中和请求体中都加入了csrf-token变量,在上述案例中,当用户误点进黑客网站后,黑客虽然能得到用户的cookie,但他在伪造请求时就无法获取到请求体中的csrf-token值。

        这里有同学会问了,既然我都获取到用户的cookie了,那我直接从cookie中读取csrf-token的值不就行了吗?这里就用到了浏览器的一个机制了,也是csrf防护机制的核心机制,就是同源策略,同源策略就是浏览器限制了不同源(IP)的网站不能相互 *** 作资源。

        所以,由于同源策略的限制,黑客网站根本无法获取到csrf-token的值,但他不死心啊,他还是伪造了请求发给银行网站,企图瞎猫碰死耗子,但csrf-token的值都是加密过的,蒙对的概率无异于中**,结果可想而知,银行网站收到请求后通过比对用户cookie和请求体的csrf-token的值就会发现这是伪造的请求,所以果断拒绝。

        这样通过csrf防护机制,就可以避免悲剧的发生,为人类文明的和谐发展贡献一份绵薄之力,实乃幸也!

                                                            图2:开启csrf防护机制

总结:总体来说,csrf防护机制是很有必要的,它可以大大的提高网站的安全性,所以我们在建站时要注意使用这个机制,不积小流,无以成江河,不积跬步,无以至千里。希望今天我的讲解能够让大家有所收获~

最后打一波广告,本人是python全栈工程师,如果各位大佬有什么兼职项目或者工作机会都可以找我哈,感激不尽~

我的QQ:1480456073

展开

Request中的各种方法

2017年02月09日 10:36:55  现龙在田丶  阅读数:7250 标签:  java web  web  Request  更多

个人分类:  JAVA  Web  Request

原文地址:>

当您需要将数据从客户端(例如浏览器)发送到API时,可以将其作为 “请求体” 发送。

请求体 是客户端发送到您的API的数据。 响应体 是您的API发送给客户端的数据。

API几乎总是必须发送一个 响应体 ,但是客户端并不需要一直发送 请求体

定义 请求体 ,需要使用 Pydantic 模型

例如,上面的模型 Item 声明了一个 JSON 对象(或Python dict ),例如:

description 和 tax 属性是可选的(因为有默认值 None ),所以下面这个 JSON 对象也是有效的:

将上面定义的模型添加到你的路径 *** 作中,就和定义Path和Query参数一样的方式:

声明参数的类型为你创建的模型 Item

通过那样定义Python 类型为 pydantic 的 model , FastAPI 将会:

模型的 JSON Schema 将成为OpenAPI生成模式的一部分,并将显示在交互式API文档中:

并且还将在需要它们的每个路径 *** 作的API文档中使用:

在你的编辑器中,编写的函数中,你将会获得类型提示和补全:

您也会获得类型 *** 作错误检查:

Pydantic 本身甚至进行了一些更改以支持此 *** 作。

但是您可以通过 PyCharm 和大多数其他Python编辑器获得相同的编辑器支持:

在函数内部,您可以直接访问模型对象的所有属性:

你可以同时定义 Path参数 和 请求体参数

你可以同时定义 Path参数 、 Query参数 和 请求体参数

FastAPI 将识别它们中的每一个并从正确的位置获取数据。

以上就是关于获取HttpServletRequest中的ip地址和body中的请求数据全部的内容,包括:获取HttpServletRequest中的ip地址和body中的请求数据、web项目中,request的方法详解、浅谈CSRF机制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9618940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存