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

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

1.实现方式:

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

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

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

3.资源约束(访问URL)

(1)在web.xml里面配置<security-constraint>:

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

(2)在web.xml里面配置<login-config>

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

(3)在web.xml里面配置<security-role>

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

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

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

1.为什么要集成?

2.原理?

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

JK插件+AJP协议;

4.怎么配置?

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

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

2个关键组件?

如何配置(P629-635)

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

1.什么是SSI?

Eg:

结果:

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

3.SSI指令集?

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

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

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

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

1.Tomcat阀的作用范围

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

2.Tomcat阀的功能

注意:是Valve不是Value!

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

Eg:

测试:

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

Eg:

测试:

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

Eg:

测试:

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

Eg:

测试:

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

1.几个SSL的概念?

  • SSL加密

     

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

     

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

*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文件)

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

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

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

1.Log4J

2.在Java Application使用Log4J

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

3.在web应用使用Log4J

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

Eg:

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

一个程序示例:

import java.net.URL;
import java.net.InetAddress;

import org.apache.catalina.connector.Connector;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.startup.Embedded;
import org.apache.catalina.Container;

public class EmbeddedTomcat {
    private String path = null;
    private Embedded embedded = null;
    private Host host = null;

    public EmbeddedTomcat() {
    }

    /**
     * 设置Tomcat的根路径
     */
    public void setPath(String path) {
        this.path = path;
    }

    /**
     * 返回Tomcat的根路径
     */
    public String getPath() {
        return path;
    }

    /**
     * 启动Tomcat服务器
     */
    public void startTomcat() throws Exception {
        Engine engine = null;
        //设置catalina.home系统属性
        System.setProperty("catalina.home", getPath());
        //创建嵌入式Tomcat服务器
        embedded = new Embedded();
        //创建Engine实例
        engine = embedded.createEngine();
        engine.setDefaultHost("localhost");
        //创建默认的Host实例
        host = embedded.createHost("localhost", getPath() + "/webapps");
        engine.addChild(host);
        //创建ROOT context
        Context context = embedded.createContext("", getPath() + "webapps/ROOT");
        host.addChild(context);
        //创建examples context
        Context examplesContext = embedded.createContext("/examples",
                getPath() + "webapps/examples");
        host.addChild(examplesContext);
        //把Engine实例加入到嵌入式Tomcat服务器
        embedded.addEngine(engine);
        //创建和安装默认的HTTP connector
        InetAddress addr = null;
        Connector connector = embedded.createConnector(addr, 8080, false);
        embedded.addConnector(connector);
        //!!!启动嵌入式Tomcat服务器
        embedded.start();
    }

    /**
     * 终止嵌入式Tomcat服务器
     */
    public void stopTomcat() throws Exception {
        embedded.stop();
    }

    public static void main(String args[]) {
        try {
            EmbeddedTomcat tomcat = new EmbeddedTomcat();
            String rootpath = null;
            if (args.length > 0) {
                rootpath = args[0];
            } else {
                throw new Exception("Tomcat's root path is unknown.");
            }
            tomcat.setPath(rootpath);
            tomcat.startTomcat();
            Thread.sleep(1000 * 60 * 60); //睡眠1小时
            tomcat.stopTomcat();
            System.exit(0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

附录:

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值