《JavaWeb与Tomcat》——7.Tomcat高级用法

你的名字 2023-09-30 10:42 115阅读 0赞

这一章主要讲Web的安全域,即用户能访问的资源的权限(资源范围);

1.实现方式:

badeb334497c912355d67c96a4715af1.png

(1)通过Web应用,如Servlet中取request的username,查DtaBase或Session验证用户身份;

(2)使用web服务器实现,为用户配置各种”身份”,一个用户可以有多个身份;然后再为每个身份指定访问的权限的范围,每种身份都有自己的权限;如下所示:

25ef729fd8090183f800b5d7dea8443e.png

2.有哪些域?(资源类型)怎么用?

661a50471449e1d350e6c0a2392fb61a.png

3.资源约束(访问URL)

(1)在web.xml里面配置

使用,里面包括2个内容:——约束name、指定的url集合、指定的请求方法(POST/GET…);——又访问权限的role角色(可以多个);eg:

7850a3049384c30017dbe745b12d3a06.png

(2)在web.xml里面配置

访问受访问的URL时会弹出指定的身份验证弹框;(包括登录、检查、错误页面的配置)

2111b63474938db76e53cf9746284556.png

(3)在web.xml里面配置

包括web应用下包含的所有角色;

15ba5b2d73e974304f775150f883b8f6.png

其他的:内存域,JDBC域/DataSource域;

这一章讲Tomcat与其他HTTP服务器集成——配合使用;

1.为什么要集成?

e36ad4c053fafd30cd2b11c0d0713c56.png

2.原理?

6d1d061be23df897a576d2f68850602f.png

b91a8b779e20c46611246fc5743c8a40.png

feab3a6299511a70c83439d48ec90919.png

3.Tomcat怎么与HTTP服务器通信?

JK插件+AJP协议;

cf34400c1dadce337573b2bd1a059557.png

d102646182ee95da6e4eccb79c1a6c9b.png

4.怎么配置?

Windows/Linux下与Apache服务器集成:

488357f4253572a2e6fb5c6d11e6d978.png

2fecc99b5fa090a2d5e23e1e23884439.png

cb25312c7a9b3e3715c62e3ddf7ca5f4.png

9eed56407b4519d8c25a89f3beb485de.png

5.Tomcat集群——多个Tomcat与Apache服务器集成

89d2f09c8c412d0598acba193d5e57e8.png

2个关键组件?

d5db6423f52a06bb196589715d1be58f.png

如何配置(P629-635)

这一章主要讲在Tomcat里面配置SSI,SSI是嵌在..里面的一种指令,给服务器解析运行,然后返回结果在html页面上;(可以把SSI理解成一种前段HTML的技术)

1.什么是SSI?

f186ed478ab08b29fa21796f9e7e4591.png

Eg:

36a777c2be6b77bd7f656333f53c5b96.png

结果:

efa7eab04afb775ba23382a1467260c1.png

2.JSP/Servlet也可以实现类似的功能,其区别?

d1e1928f767c6dea9b6f57dc280c7cb2.png

40de1c7424007537d25d73adc48eeb3b.png

3.SSI指令集?

b865d1f1eb8b70f332410f12b043ece5.png

4.怎么在Tomcat中配置,让服务器端支持SSI?

93cb737b75c7a0062c042246125e2196.png

17cc6b878e97ed127b5bcf6e5d85caa6.png

这一章主要讲Tomcat阀,顾名思义,阀就是阀门的意思;

前面讲过Servlet中有个Filter过滤器,可以在Web组件调用前修改检查request,在Web组件调用之后修改response;

Tomcat阀的作用与之类似,但是没有那么复杂的功能和用法(主要是配置),其功能包括记录访问日志、请求记录、远程地址/主机过滤这几个功能,并且Tomcat阀是Tomcat专有的,而Filter可以适用于所以Servlet容器;

1.Tomcat阀的作用范围

既然是Tomcat专有的,Tomcat里面有Engine、Host、Context这几个范围,那么Tomcat阀也可以在这几个范围内配置;

4cc3406a9b9c2c8db467e4fc87537017.png

2.Tomcat阀的功能

093592d392af315a658b56c5d08abf7d.png

注意:是Valve不是Value!

(1)客户访问日志阀
将用户的请求信息写入本地日志文件,包括网页访问次数、访问时间、请求方式、会话活动、安全信息等;这个Valve可以配置到Engine、Host、Context任意一个Catalina容器中;

941226872f281690b9b4a32333971575.png

9abd5c78f0d5d254ab577d04e4091ac7.png

Eg:

2a06bc56ca0fa6d9c0dffe00e0051c5c.png

测试:

089ab72737f5f194e8b44aca59b1c159.png

(2)远程地址过滤器
根据远程用户的IP地址进行过滤,包括允许allow和拒绝deny名单;

4a861c1b2ed4d11c548fcf5a4ff331ee.png

Eg:

dee80592f69107807e89554ac2e3f0c8.png

测试:

3edc062213b5caedea458d22b7229661.png

(3)远程主机过滤
这个和远程地址过滤器类似,根据主机名来过滤;

af8b23ccc029805196b41e771f7e3b36.png

ec82df8700bd90c88a312cade6a8cd4d.png

Eg:

92938e8e8bebc23b105e6319f09a193a.png

测试:

3edc062213b5caedea458d22b7229661.png

(4)客户请求记录器
与前面的访问日志类似,这个客户请求记录器更偏向于记录request的详细信息;当HTTP请求中的Header或者Cookies有错误时,这个客户请求记录器就能很方便的跟踪用户请求;

90d6a90f5ffb1551ed9b1d665e6820b6.png

Eg:

08652b0ae07e1ea9471c10522ed30144.png

测试:

6f839f529713585cae8b1bf3ab1404b3.png

这一章主要讲在Tomcat中配置SSL;SSL(Secure Sockets Layer,安全套接层)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密,防止信息被监听、截获、篡改等。

1.几个SSL的概念?

  • SSL加密

    d19dfd76ec1a4f49aa89992f94272dd1.png

  • 安全证书
    安全证书相当于身份证,用户和服务器都有,用来确认身份的;

    582b0b2fdcb71a44ebe682ed605d3fe6.png

获取证书的两种方法:1. 权威证书颁发机构;2. 个人证书;
无论哪种证书,都是用来加密用的;

a3e2acf4912be1b2818aced514492138.png

64038e54e31ff5079a5b1c5ea905aec0.png

*2.SSL过程?

举个例子:

  • 第1步:爱丽丝给出支持SSL协议版本号,一个客户端随机数(Client random,请注意这是第一个随机数),客户端支持的加密方法等信息;
  • 第2步:鲍勃收到信息后,确认双方使用的加密方法,并返回数字证书,一个服务器生成的随机数(Server random,注意这是第二个随机数)等信息;
  • 第3步:爱丽丝确认数字证书的有效性,然后生成一个新的随机数(Premaster secret),然后使用数字证书中的公钥,加密这个随机数,发给鲍勃。
  • 第4步:鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret);(第三、四步就是非对称加密的过程了)
  • 第5步:爱丽丝和鲍勃通过约定的加密方法(通常是AES算法),使用前面三个随机数,生成对话密钥,用来加密接下来的通信内容;

总结来说:

1.CA机构颁发数字证书给鲍勃;
2.爱丽丝和鲍勃进行SSL握手,爱丽丝通过数字证书确定鲍勃的身份;
3.爱丽丝和鲍勃传递三个随机数,第三个随机数通过非对称加密算法进行传递;
4.爱丽丝和鲍勃通过一个对称加密算法生成一个对话密钥,加密接下来的通信内容。

3.Tomcat中配置SSL?

(1)准备安全证书(颁发或个人证书,这里讲第二种生成证书.keystore文件)

330a81f769dcb907cc616e5a65504ec3.png

(2)配置Tomcat的SSL连接器(Connector)

6fa2f636cf8d18b07c23d0c282c2142d.png

87d36318fdf6e09ef3cbad7547f7c6bb.png

(3)访问支持SSL的Web站点

5f3ab012ef3a742836d07da17dd0e022.png

这一章主要讲如何使用开源的Log4J管理日志,不需要导包+实现API,只需要调用,只需要修改配置文件即可;

1.Log4J

cf71e7fb028fadeea9bc9417225dc4a6.png

b8f67d0379a0ac0199e1658730a601a7.png

2.在Java Application使用Log4J

导jar包;getLogger();logger.warn(…);

e47dcc5abb3ae9c9051ae430fa6ef17a.png

3.在web应用使用Log4J

(1)Log4J的jar包放到helloapp/WEB-INF/lib下;
(2)配置Log4J.proporty,包括输出路径、格式等信息;
(3)写一个专门配置Logger的Servlet(放在init方法里,并且配置xml预编译);
(4)在jsp里面导包+Logger API;

Eg:

8b5bacf2a442bbef1ef2154f4f847b85.png

这一章主要讲创建嵌入式Tomcat服务器;这里的”嵌入式”指的不是ARM,而是”把Tomcat嵌入到一个Java应用程序里面去”;这样,用户可以通过应用程序灵活的控制Servlet容器,并且他们可以共享内存;

一个程序示例:

  1. import java.net.URL;
  2. import java.net.InetAddress;
  3. import org.apache.catalina.connector.Connector;
  4. import org.apache.catalina.Context;
  5. import org.apache.catalina.Engine;
  6. import org.apache.catalina.Host;
  7. import org.apache.catalina.startup.Embedded;
  8. import org.apache.catalina.Container;
  9. public class EmbeddedTomcat {
  10. private String path = null;
  11. private Embedded embedded = null;
  12. private Host host = null;
  13. public EmbeddedTomcat() {
  14. }
  15. /**
  16. * 设置Tomcat的根路径
  17. */
  18. public void setPath(String path) {
  19. this.path = path;
  20. }
  21. /**
  22. * 返回Tomcat的根路径
  23. */
  24. public String getPath() {
  25. return path;
  26. }
  27. /**
  28. * 启动Tomcat服务器
  29. */
  30. public void startTomcat() throws Exception {
  31. Engine engine = null;
  32. //设置catalina.home系统属性
  33. System.setProperty("catalina.home", getPath());
  34. //创建嵌入式Tomcat服务器
  35. embedded = new Embedded();
  36. //创建Engine实例
  37. engine = embedded.createEngine();
  38. engine.setDefaultHost("localhost");
  39. //创建默认的Host实例
  40. host = embedded.createHost("localhost", getPath() + "/webapps");
  41. engine.addChild(host);
  42. //创建ROOT context
  43. Context context = embedded.createContext("", getPath() + "webapps/ROOT");
  44. host.addChild(context);
  45. //创建examples context
  46. Context examplesContext = embedded.createContext("/examples",
  47. getPath() + "webapps/examples");
  48. host.addChild(examplesContext);
  49. //把Engine实例加入到嵌入式Tomcat服务器
  50. embedded.addEngine(engine);
  51. //创建和安装默认的HTTP connector
  52. InetAddress addr = null;
  53. Connector connector = embedded.createConnector(addr, 8080, false);
  54. embedded.addConnector(connector);
  55. //!!!启动嵌入式Tomcat服务器
  56. embedded.start();
  57. }
  58. /**
  59. * 终止嵌入式Tomcat服务器
  60. */
  61. public void stopTomcat() throws Exception {
  62. embedded.stop();
  63. }
  64. public static void main(String args[]) {
  65. try {
  66. EmbeddedTomcat tomcat = new EmbeddedTomcat();
  67. String rootpath = null;
  68. if (args.length > 0) {
  69. rootpath = args[0];
  70. } else {
  71. throw new Exception("Tomcat's root path is unknown.");
  72. }
  73. tomcat.setPath(rootpath);
  74. tomcat.startTomcat();
  75. Thread.sleep(1000 * 60 * 60); //睡眠1小时
  76. tomcat.stopTomcat();
  77. System.exit(0);
  78. } catch (Exception e) {
  79. e.printStackTrace();
  80. }
  81. }
  82. }

附录:

A. server.xml的配置
Service、engine、host、context、connector的配置;

B. web.xml的配置
Filter过滤器、servlet、Session、Tag Library标签、资源JNDI Resource、安全域约束security-constraint、安全-角色security role等的配置;

C. XML介绍

Tomcat与JavaWeb原理 学习到此结束(2019-9-16 09:33:46);主要还是讲的偏基础,了解一些Web的常用的组件,什么是Web服务器、web应用、Servlet容器,Servlet、JSP、JavaBean等,还有Tomcat的一些配置;

发表评论

表情:
评论列表 (有 0 条评论,115人围观)

还没有评论,来说两句吧...

相关阅读

    相关 javaweb——嵌入tomcat

                  原创文章,转载请注明出处               该嵌入tomcat的实现可以直接运行类来启动tomcat,也可以在任意路径下运行bat文件启

    相关 JavaWebTomcat

    常见的软件体系结构 C/S结构 C/S结构即客户端/服务器(Client/Server),例如QQ 需要编写服务器端程序,以及客户端程序,例如我们安装的