1.1什么是Servlet
1.1.1 概念
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
1.1.2 Servlet开发流程
(一)、实现Servlet接口或者继承HttpServlet类
注:继承HttpServlet类更简洁更常用。
(二)、重写HttpServlet类的doGet()和doPost()方法
(三)、配置web.xml文件或者使用注解对servlet进行配置
1、首先在maven配置文件pom.xml中导入javax.Servlet - API的依赖
2、使用web.xml配置servlet访问路径
3、使用注解配置servlet访问路径(二选一)
HttpServlet类上加上@WebServlet(/WEB/DoLogin1)
1.1.3 Servlet的生命周期
- init方法:创建完servlet对象时调用,只调用一次(单例)
- Service方法:每次发出请求时调用
- Destory方法:销毁servlet时调用,只调用一次。
Servlet执行流程:
1、读取web.xml文件解析servlet
2、使用反射机制初始化servlet类
3、执行httpservlet父类service方法
4、通过service()方法判断请求
5、实现具体子类方法
Servlet线程安全问题:单例的,不安全的,不要在servlet中定义成员变量,会发生线程安全问题
cookie实现原理
1、服务端创建cookie,使用响应头返回客户端
2、客户端接收cookie,保存到本地
3、客户端请求时会将cookie放入请求头中
4、服务端从请求头获取cookie消息
session实现原理
1、服务端创建session
2、将sessionid放入响应头返回客户端
3、客户端请求时会将sessionid放入请求头中
4、服务端从请求头获取sessionid,使用session获取对应session消息
1.2HTTP请求分析
1.2.1请求格式
Https协议需要CA申请证书、443端口,具有安全的SSL加密传输协议,而Http是超文本传输协议、端口80、明文传输。
1.2.2HTTP防盗链
- 控制请求资源,判断请求来源referer
- 使用nginx反向代理
1.2.3跨域
跨域其实是浏览器的安全机制,请求访问的域名与Ajax请求地址不一致,浏览器会无法返回请求结果。
解决方案:
使用jsonP,支持get方法,但不支持post方法
添加header请求允许访问,
response.setHeader(“Access-Controller-Allow-Origin”,*“*”)
使用接口网关 - - nginx、springcloud
httpclient内部转发
1.2.4网络攻击
表单重复提交及接口模拟(CSRF):
表单重复提交:使用token,如果获取到请求,则删除该token(最好使用redis)
接口模拟:使用token+验证码 例:12306登录验证码,防止恶意攻击
JavaScript脚本攻击:
xss攻击:使用拦截器将脚本进行转义。
例:钓鱼网站思路
https://www.baidu.com/login/username=<script>localtion.href="www.jiabaidu.com"</script>