当前位置: 首页 > news >正文

Servlet的部署与安全

 1 Servlet 部署

Servlet规范关于各个东西该放在哪里有许多严格的规则。

1.1 WAR

war文件代表Web归档(Web Archive),war实际就是一个JAR,只不过扩展名是.war而不是.jar。

其采用了一种可移植的压缩形式,把整个Web应用结构(去掉Web应用上下文目录,也就是把WEB-INF之上的一级目录去掉)压缩起来。

1.1.1 声明库依赖性

war独有的特性就是声明库依赖性。

可以在META-INF/MANIFEST.MF文件中声明库依赖性,这样在部署时就能检查容器能否找到应用依赖的包和类,如果没找到,则不能部署。(这样做的好处是,当请求到来时,如果容器在其类路径中没有找到所请求资源需要的特定类,就会出现问题,而通过这个就会将这个问题暴露在部署时,而不是到真正的运行时)

1.2 Servlet映射

WEB-INF 或META-INF下的任何内容都不能直接访问。

ServletContext中的getResource()和getResourceAsStream()两个方法只用于Web应用中未部署在JAR文件中的资源。

1.2.1 映射规则

首先查找完全评判,然后是查找目录匹配,最后才是扩展名匹配。

如果一个请求与多个目录<url-pattern>匹配,容器会选择最长的匹配。

1.3 配置页面

按顺序指定一个页面列表,容器总是按同一个列表查找。对于部分请求指定的目录,容器按你指定的页面顺序在这个目录中查找。

<welcome-file-list>可配置多个文件(不能以斜线开头)

1.3.1 配置错误页面

1,声明一个“普遍”型错误页面

<error-page>

      <exception-type>java.lang.Throwable</exception-type>

      <location>/errorPage.jsp</location>

</error-page>

2,为更明确的异常声明一个错误页面

<error-page>

      <exception-type>java.lang.ArithmeticException</exception-type>

      <location>/ati.jsp</location>

</error-page>

3,根据一个HTTP状态码声明错误页面

<error-page>

      <error-code>404</error-code>

      <location>/noPage.jsp</location>

</error-page>

1.4 DD中配置servlet初始化

servlet默认会在每一个请求到来时初始化。这说明,第一个客户要承受类加载、实例化和初始化等一系列开销,然后容器才能正常工作:分配一个线程,并调用servlet的service()方法。

如果想在部署时加载servlet,可以在DD中使用<load-on-startup>元素。<load-on-starup>非负值意味着要早加载及servlet的加载顺序。

2 web应用安全

servlet安全的四大要素:认证、授权、机密性和数据完整性。

图 第一次发起请求时HTTP的认证步骤

图 携带认证信息发起请求后HTTP的认证步骤

图 没有携带口令发起请求,容器认证授权步骤

图 携带口令发起请求,容器认证授权步骤

2.1 认证

基本BASIC

以一种编码形式(base64未加密)传输登陆信息。安全性很弱。

摘要DIGEST

以一种更安全的方式传输登陆信息。

客户证书CLIENT-CERT

以一种非常安全的形式传输登陆信息,它使用了公共密钥证书。缺点是,你的客户必须先有一个证书才能登陆你的系统。

表单FORM

前面3种认证都使用了浏览器的标准弹出表单来输入用户名和口令。而表单认证允许你利用合法的HTML建立自己的定制登陆表单。

表 4种类型的认证

实现认证:

<web-app…>

  <login-config>

       <auth-method>BASIC</auth-method>

  </login-config>

</web-app>

表单认证实现:

<web-app…>

  <login-config>

       <auth-method>FORM</auth-method>

             <form-login-config>

                    <form-login-page>/loginPage.html</form-login-page>

                <form-error-page>/loginError.html</form-login-page>

       </form-login-config>

  </login-config>

</web-app>

2.2 授权

servlet规范没有指出容器应该如何实现对认证数据(包括用户名和口令)的支持。现在开发中绝大部分是采用将认证数据存储在数据库中的形式。

授权步骤是:

1)定义角色。

2)定义资源/方法约束。以声明方式指定一个资源/方法组合,只能由特定角色的用户访问。

图 DD中的<security-constraint>元素

http://www.lryc.cn/news/191116.html

相关文章:

  • 2023版IDEA的下载、安装、配置、快捷键、模板、插件与使用
  • vue cli和vite区别
  • SQL Server修改表结构
  • C++学习——对象的内存模型
  • cpp文件操作
  • failed to req API:/nacos/v1/ns/instance after all servers([localhost:8848])
  • 【ROS】ros-noetic和anaconda联合使用
  • 【MySQL】聚合查询与分组查询
  • RFID技术在锂电池生产线自动化应用
  • 钢筋智能测径仪 光圆与带肋钢筋均可检测!
  • docker--在Anaconda jupyter 容器中使用oracle数据源时,Oracle客户端安装配置及使用示例
  • can的波特率/比特率
  • 项目经理涨薪秘籍!技巧都在这里了
  • 甘特图组件DHTMLX Gantt示例 - 如何有效管理团队工作时间?(一)
  • 健效达海豚妈妈儿保项目推介会盛大启幕,聚焦互联网+精准医疗
  • 使用XLua在Unity中获取lua全局变量和函数
  • springboot项目集成kafka,并创建kafka生成消息线程池
  • PreScan与MATLAB联合仿真报错
  • ros学习笔记(1)Mac本地安装虚拟机,安装Ros2环境
  • 史上最强,Jmeter性能测试-性能场景设计实例(详全)
  • 【vim 学习系列文章 7-- vim vnormap nnoremap nmap map inoremap 区别】
  • [ERROR] COLLATION ‘utf8_unicode_ci‘ is not valid for CHARACTER SET ‘latin1‘
  • 基于rancher安装部署k8s
  • 保姆级微服务部署教程
  • springboot 定时任务
  • 【大数据】HBase入门指南
  • 零售数据分析模板鉴赏-品类销售结构报表
  • 竞赛 深度学习 机器视觉 车位识别车道线检测 - python opencv
  • MySQL中使用函数会使索引失效?
  • 金和OA C6任意文件读取漏洞 复现[附POC]