这一章主要讲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的一些配置;