第二章 配置Tomcat【笔记】
2017-11-09 16:49
393 查看
涉及内容:配置tomcat
复制conf目录所有内容,同时创建common、logs、temp, server,shared、webapps、work
修改server.xml配置文件
# iptables -t nat -L (列出当前linux网络配置规则)
输入如下命令(对于配置iptables规则慎重配置) 这是对于所有ip地址进行配置
可以配置server.xml 文件配置代理端口和代理IP地址
通过一个服务包装器运行tomcat在80端口
jsvc 在linux创建一个服务启动java应用,具体操作可以百度一下,也就可以用jsvc来管理tomcat
内存设置 -Xms384M 设置虚拟机启动时堆内存
内存设置 -Xmx384M 设置虚拟机最大可以扩展虚拟内存
安全调试 -Djava.security.debug=all 开启所有调试输出
调试 -enableassertions 开启断言检查
调试 -verbose:class 将虚拟机的信息输出到控制台
调试 -verbose:gc 开启垃圾回收日志输出
图形 -Djava.awt.headless=true 允许虚拟机运行没有任何展示设备上(例如键盘,显示屏)
国际化 -Duser.language=en 设置tomcat运行语言
国际化 -Dfile.encoding=UTF-8 设置tomcat默认使用字符编码
网络 -Djava.net.preferIPv4Stack=true 配置虚拟机使用IPv4替换IPv6
设置虚拟机启动项可以在CATALINA_HOME/bin/catalina.* 文件设置JAVA_OPTS
例如:(使用JPDA远程调试客户端)
JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket, address=8000,server=y,suspend=n"
具体可以参考:JPDA教程
通过JMX远程连接监控
Java编译器选择:
内嵌JDTjava编译器(默认)
使用Apache Ant去编译JSP页
然后修改server.xml配置文件
只有在启动的时候进行验证,在$CATALINA_HOME/conf/tomcat-user.xml中进行配置
文件片段
JDBCRealm
表示将用户名密码存到数据库中
className 类名路径org.apache.catalina.realm.JDBCRealm
connectionName : 数据库用户名
connectionPassword : 数据库密码
connectionURL : 数据库URL
digest:加密算法(默认明文)
driverName : JDBC驱动类名
roleNameCol : 角色列(在角色表中)
userNameCol: 用户名列(在用户表中)
userCredCol : 密码列(在用户表中)
userRoleTable : 角色表名
userTable : 用户表名
JNDIRealm
从LDAP取出用户名、密码,角色 ,这时候可以使用JNDIRealm (在server.xml配置)
JAASRealm
它通过Java Authentication 和Authorization Service(JAAS) 取用户信息
列出JAASRealm实现属性
className 类名org.apache.catalina.realm.JAASRealm
appName : 应用名默认值为Tomcat,你可以改成任何值
userClassNames 配置规则表示失效用户javax.security.Principal (冒号分割)
roleClassNames 配置规则表示失效的角色javax.security.Principal
useContextClassLoader 告诉JAASRealm何时上下文加载类中加载
配置文件
在web.xml配置安全限制
配置 .java.login.conf 文件
基础认证 : 用户密码通过base64编码之后
加密认证: 用户密码通过加密算法
表单认证: 用户密码通过表单提交
客户端认证: 用户使用客户端认证证书
8.1、基础认证
它替换了Apache Web Server’s .htaccess (也是限制访问方法,参考http://www.jb51.net/article/25476.htm)
8.2、加密认证
在web.xml文件中配置
在server.xml配置 算法为MD5
配置:
错误页面error.html
8.4、客户端证书验证
与之代替是发送X.509数字证书。
在server.xml配置
必须使用tomcat要求四种验证方式而不是自定义(BASIC、DIGEST,FORM 、CLIENT-CERT)
要求是HTTP cookies,标准session ID 为JSESSIONID, 而单次登录的session ID 为 JSESSIONIDSSO
但是会话肯定存在某一个地方,也就需要一个管理者进行管理,类似如下配置
<hostname>/<webapp-name>/目录下,在下次启动自动加载这个文件,但是如果不是正常关机,那么会话会丢失。
例子:
第一种文件存储(FileStore):
例子:如下
第二种JDBC存储(JDBCStore)
在server.xml配置
属性:包括数据库表的对应关系,可以采用默认值如上所示。 例如sessionTable 会话表名 默认值tomcat$sessions. 规则是session{列名}Col,例如数据id sessionIdCol
className,driverName,connectionURL,sessionTable,sessionIdCol,sessionDataCol,sessionValidCol,sessionMaxInactiveCol,sessionLastAccessedCol,checkInterval
然后在配置资源元素(可以配置在Tomcat安装目录下conf文件的context.xml文件中,或在META-INF文件夹下创建context.xml然后添加进去)本质上一个全局,一个局部
配置JDBCResources
最后你还要安装连接数据驱动jar复制到$CATALINA_HOME/common/lib目录下
实例化一个日历类
在server.xml 中子标签Context 添加
用(~)加上用户名来作为某个用户站点。例如;
1、迁移web应用目录
在服务器运行多个Tomcat实例,需要每个JVM单独有webapp目录,有些共享目录,但不可以共享配置文件复制conf目录所有内容,同时创建common、logs、temp, server,shared、webapps、work
修改server.xml配置文件
2、改变默认端口8080
apache安装目录/conf/server.xml 将8080改成80<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
3、将端口80重定向成端口8080
利用linux 内核 iptables# iptables -t nat -L (列出当前linux网络配置规则)
输入如下命令(对于配置iptables规则慎重配置) 这是对于所有ip地址进行配置
# iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 # iptables -t nat -I OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080如果是具体的ip地址如下配置
# iptables -t nat -I PREROUTING -p tcp --dst 192.168.1.100 --dport 80 -j REDIRECT -- to-ports 8080 # iptables -t nat -I OUTPUT -p tcp --dst 192.168.1.100 --dport 80 -j REDIRECT --toports 8080这里只针对192.168.1.100 IP地址 进行端口重定向
可以配置server.xml 文件配置代理端口和代理IP地址
<Connector port="8080" protocol="HTTP/1.1" proxyPort="80" connectionTimeout="20000" redirectPort="8443" proxyName="hostname.example.com" />proxyPort : 代理端口,proxyName:代理主机
通过一个服务包装器运行tomcat在80端口
jsvc 在linux创建一个服务启动java应用,具体操作可以百度一下,也就可以用jsvc来管理tomcat
4、通用异常
端口被占用了5、Java VM 配置
java虚拟机配置选项内存设置 -Xms384M 设置虚拟机启动时堆内存
内存设置 -Xmx384M 设置虚拟机最大可以扩展虚拟内存
安全调试 -Djava.security.debug=all 开启所有调试输出
调试 -enableassertions 开启断言检查
调试 -verbose:class 将虚拟机的信息输出到控制台
调试 -verbose:gc 开启垃圾回收日志输出
图形 -Djava.awt.headless=true 允许虚拟机运行没有任何展示设备上(例如键盘,显示屏)
国际化 -Duser.language=en 设置tomcat运行语言
国际化 -Dfile.encoding=UTF-8 设置tomcat默认使用字符编码
网络 -Djava.net.preferIPv4Stack=true 配置虚拟机使用IPv4替换IPv6
设置虚拟机启动项可以在CATALINA_HOME/bin/catalina.* 文件设置JAVA_OPTS
例如:(使用JPDA远程调试客户端)
JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket, address=8000,server=y,suspend=n"
具体可以参考:JPDA教程
通过JMX远程连接监控
JAVA_OPTS="-Dcom.sun.management.jmxremote=true \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false"
-Dcom.sun.management.jmxremote.password.file=/path/to/pw/file"JMX具体可以参考: JMX文档
6、改变JSP编译器
你可以是用JDT或JDK‘s的javac编译’Java编译器选择:
内嵌JDTjava编译器(默认)
使用Apache Ant去编译JSP页
7、管理领域、角色和用户
7.1、领域:可以实现UserDatabaseRealm, JDBCRealm, JNDIRealm, and JAASRealm类然后修改server.xml配置文件
<Realm className="some.realm.implementation.className" customAttribute1="some custom value" customAttribute2="some other custom value"/>UserDatabaseRealm
只有在启动的时候进行验证,在$CATALINA_HOME/conf/tomcat-user.xml中进行配置
文件片段
<!-- NOTE: By default, no user is included in the "manager" role required to operate the "/manager" web application. If you wish to use this app, you must define such a user - the username and password are arbitrary. --> <tomcat-users> <user name="tomcat" password="tomcat" roles="tomcat" /> <user name="role1" password="tomcat" roles="role1" /> <user name="both" password="tomcat" roles="tomcat,role1" /> </tomcat-users>
JDBCRealm
表示将用户名密码存到数据库中
<!-- Set up a JDBC Real for JabaDot user database --> <Realm className="org.apache.catalina.realm.JDBCRealm" driverName="org.postgresql.Driver" connectionURL="jdbc:postgresql:jabadot" connectionName="system" connectionPassword="something top secret" userTable="users" userCredCol="passwd" userRoleTable="controls" roleNameCol="roles" userNameCol="nick"/>Realm介绍
className 类名路径org.apache.catalina.realm.JDBCRealm
connectionName : 数据库用户名
connectionPassword : 数据库密码
connectionURL : 数据库URL
digest:加密算法(默认明文)
driverName : JDBC驱动类名
roleNameCol : 角色列(在角色表中)
userNameCol: 用户名列(在用户表中)
userCredCol : 密码列(在用户表中)
userRoleTable : 角色表名
userTable : 用户表名
JNDIRealm
从LDAP取出用户名、密码,角色 ,这时候可以使用JNDIRealm (在server.xml配置)
<Realm className="org.apache.catalina.realm.JNDIRealm" connectionURL="ldap://ldap.groovywigs.com:389" userPattern="uid={0},ou=people,dc=groovywigs,dc=com" roleBase="ou=groups,dc=groovywigs,dc=com" roleName="cn" roleSearch="(uniqueMember={0})"/>
JAASRealm
它通过Java Authentication 和Authorization Service(JAAS) 取用户信息
列出JAASRealm实现属性
className 类名org.apache.catalina.realm.JAASRealm
appName : 应用名默认值为Tomcat,你可以改成任何值
userClassNames 配置规则表示失效用户javax.security.Principal (冒号分割)
roleClassNames 配置规则表示失效的角色javax.security.Principal
useContextClassLoader 告诉JAASRealm何时上下文加载类中加载
配置文件
# export JAVA_OPTS=\ '-Djava.security.auth.login.config=/root/.java.login.config'
<Realm className="org.apache.catalina.realm.JAASRealm" userClassNames="com.sun.security.auth.UnixPrincipal" roleClassNames="com.sun.security.auth.UnixNumericGroupPrincipal"/>
在web.xml配置安全限制
<?xml version="1.0"?> <security-constraint> <web-resource-collection> <web-resource-name>Entire Application</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>0</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <realm-name>My Club Members-only Area</realm-name> <form-login-config> <form-login-page>/login.html</form-login-page> <form-error-page>/error.html</form-error-page> </form-login-config> </login-config> <security-role> <role-name>0</role-name> </security-role>
配置 .java.login.conf 文件
Tomcat { com.sun.security.auth.module.UnixLoginModule required debug=true; };
8、容器安全管理
有四种不同方法获取证书基础认证 : 用户密码通过base64编码之后
加密认证: 用户密码通过加密算法
表单认证: 用户密码通过表单提交
客户端认证: 用户使用客户端认证证书
8.1、基础认证
它替换了Apache Web Server’s .htaccess (也是限制访问方法,参考http://www.jb51.net/article/25476.htm)
<!-- Define the Members-only area, by defining a "Security Constraint" on this Application, and mapping it to the subdirectory (URL) that we want to restrict. --> <security-constraint> <web-resource-collection> <web-resource-name> Entire Application </web-resource-name> <url-pattern>/members/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>member</role-name> </auth-constraint> </security-constraint> <!-- Define the Login Configuration for this Application --> <login-config> <auth-method>BASIC</auth-method> <realm-name>My Club Members-only Area</realm-name> </login-config>
8.2、加密认证
在web.xml文件中配置
<!-- Define the Members-only area, by defining a "Security Constraint" on this Application, and mapping it to the subdirectory (URL) that we want to restrict. --> <security-constraint> <web-resource-collection> <web-resource-name> Entire Application </web-resource-name> <url-pattern>/members/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>member</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>DIGEST</auth-method> <realm-name>My Club Members-only Area</realm-name> </login-config>
在server.xml配置 算法为MD5
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" digest="MD5"/>或者通过工具手动加密密码, 然后采用UserDatabaseRealm进行配置
<?xml version='1.0'?> <tomcat-users> <role rolename="tomcat"/> <role rolename="role1"/> <role rolename="member"/> <user username="jasonb" password="9a3729201fdd376c76ded01f986481b1" roles="member"/> </tomcat-users>8.3、表单认证
配置:
<login-config> <auth-method>FORM</auth-method> <realm-name>My Club Members-only Area</realm-name> <form-login-config> <form-login-page>/login.html</form-login-page> <form-error-page>/error.html</form-error-page> </form-login-config> </login-config>一个简单登录页面login.html
<html> <head> <title></title> </head> <body> <center> <!-- Begin login form --> <form method="post" action="j_security_check" name="loginForm" id="loginForm"> <table border="0" cellspacing="5"> <tr> <td height="50"> Please log in. </td> </tr><!-- Username and password prompts fields layout --> <tr> <td> <table width="100%" border="0" cellspacing="2" cellpadding="5"> <tr> <th align="right"> Username </th> <td align="left"> <input type="text" name="j_username" size="16" maxlength="16"> </td> </tr> <tr> <th align="right"> Password </th> <td align="left"> <input type="password" name="j_password" size="16" maxlength="16"> </td> </tr> <tr> <td width="50%" valign="top"> <div align="right"> </td> <td width="55%" valign="top"> </td> </tr><!-- Login and reset buttons layout --> <tr> <td width="50%" valign="top"> <div align="right"> <input type="submit" value='Login'> </div> </td> <td width="55%" valign="top"> <input type="reset" value='Reset'> </td> </tr> </table> </td> </tr> </table> </form><!-- End login form --> </center><script language="JavaScript" type="text/javascript"> <!-- // Focus the username field when the page loads in the browser. document.forms["loginForm"].elements["j_username"].focus( ) // --> </script> </body> </html>
错误页面error.html
<html> <head> <title></title> </head> <body> <center> <h2> Login failed.<br> Please try <a href="/">logging in again.</a> </h2> </center> </body> </html>
8.4、客户端证书验证
与之代替是发送X.509数字证书。
9、单次登陆(不要重复登陆验证)
也就是有多个web 应用都有验证,只需验证一次就好了,共享验证(也就是你都通过,我就是不需要再次验证了)在server.xml配置
<!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> -->单次登录一些限制要求:
必须使用tomcat要求四种验证方式而不是自定义(BASIC、DIGEST,FORM 、CLIENT-CERT)
要求是HTTP cookies,标准session ID 为JSESSIONID, 而单次登录的session ID 为 JSESSIONIDSSO
10、控制会话
会话经常用于购物车等但是会话肯定存在某一个地方,也就需要一个管理者进行管理,类似如下配置
<Manager className="some.manager.implementation.className" customAttribute1="some custom value" customAttribute2="some other custom value"/>
11、会话持久性
会话在再次重连的时候,保存当前状态,需要将信息保存在某个位置,方式有关系型数据库、轻量文件访问协议、或者定义保存磁盘上的文件11.1、标准管理器
没有在server.xml显式配置,默认就是StandardManager,当tomcat正常关闭时候,它会将会话信息保存到名称为SESSION.ser文件里。它一般在$CATALINA_HOME/work/Catalina/<hostname>/<webapp-name>/目录下,在下次启动自动加载这个文件,但是如果不是正常关机,那么会话会丢失。
例子:
<Manager className="org.apache.catalina.session.StandardManager" maxInactiveInterval="7200"/>最大会话时间间隔为2小时,7200秒 ,它会有很多参数,可以参考其它文档
11.2、PersistentManager(持久管理器)
这个就是解决没有正常关机时候保证会话可以被保存,需要这样类去执行org.apache.catalina.session.PersistentManager ,存储方法分为文件和jdbc数据库第一种文件存储(FileStore):
<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="true"> <Store className="org.apache.catalina.session.FileStore"/> </Manager>涉及属性:类本身相关 className,时间相关的(会话活跃度,多久保存一次,空闲间隔),安全相关的(加密,算法需要随机数)
例子:如下
<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="true"> <Store className="org.apache.catalina.session.FileStore" directory="/home/jasonb/tomcat-sessions"/> </Manager>生成session文件名,《session ID》.session, 例如:4FF8890ED8A53D6B.session
第二种JDBC存储(JDBCStore)
在server.xml配置
<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="true"> <Store className="org.apache.catalina.session.JDBCStore" driverName="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mydb?user=jb;password=pw"/> </Manager>这时候需要在数据库创建一个表来存储
create table tomcat$sessions ( id varchar(64) not null primary key, data blob valid char(1) not null, maxinactive int not null, lastaccess bigint not null, );
属性:包括数据库表的对应关系,可以采用默认值如上所示。 例如sessionTable 会话表名 默认值tomcat$sessions. 规则是session{列名}Col,例如数据id sessionIdCol
className,driverName,connectionURL,sessionTable,sessionIdCol,sessionDataCol,sessionValidCol,sessionMaxInactiveCol,sessionLastAccessedCol,checkInterval
12、访问JNDI和JDBC资源
JNDI被用来定位数据库资源和其他资源。理解(JNDI是资源检索目录)12.1、JDBCDataSources
配置JDBC连接,首先要在 web.xml配置<resource-ref> <description> The database DataSource for the Acme web application. </description> <res-ref-name>jdbc/JabaDotDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>或者java代码
Context ctx = new InitialContext( ); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/JabaDotDB"); Connection conn = ds.getConnection( ); ... Java code that accesses the database ... conn.close( );
然后在配置资源元素(可以配置在Tomcat安装目录下conf文件的context.xml文件中,或在META-INF文件夹下创建context.xml然后添加进去)本质上一个全局,一个局部
<!-- Configure a JDBC DataSource for the user database. --> <Resource name="jdbc/JabaDotDB" type="javax.sql.DataSource" auth="Container" user="ian" password="top_secret_stuff" driverClassName="org.postgresql.Driver" url="jdbc:postgresql:jabadot" maxActive="8" maxIdle="4"/>
配置JDBCResources
最后你还要安装连接数据驱动jar复制到$CATALINA_HOME/common/lib目录下
12.2、其他JNDI资源。(认为(context)上下文,就是资源配置列表)
类似Spring自动注入感觉。应用启动时候实例化对象,然后对象可以通过工厂类获取实例化一个日历类
<!-- How to get a Calendar on demand (real code would just call Calendar.getInstance; we just pick on Calendar as a handy Bean. --> <resource-env-ref> <description> Fake up a Factory for Calendar objects </description> <resource-env-ref-name> bean/CalendarFactory </resource-env-ref-name> <resource-env-ref-type> java.util.GregorianCalendar </resource-env-ref-type> </resource-env-ref>
在server.xml 中子标签Context 添加
<Resource name="bean/CalendarFactory" type="java.util.GregorianCalendar" auth="Container" factory="org.apache.naming.factory.BeanFactory"/>
13、Servlet自动加载
只要文件改变,默认情况下会自动加载,对于调试很有用。其他情况需要不用重新加载。修改(server.xml的Context元素或你自定义context文件碎片属性reloadable=false)14、自定义用户目录
个人可以在特定目录上发布自己网页,用(~)加上用户名来作为某个用户站点。例如;
http://www.cs.myuniversity.edu/~ian http://members.mybigisp.com/~ian[/code]
配置用户映射关系<Listener className="org.apache.catalina.startup.UserConfig" directoryName="public_html" userClass="org.apache.catalina.startup.PasswdUserDatabase"/>网页文件可能存在如下目录:/home/users/ian/public_html 或 /users/
jbrittain/public_html.
固定根目录<Listener className="org.apache.catalina.startup.UserConfig" directoryName="public_html" homeBase="/home" userClass="org.apache.catalina.startup.HomesUserDatabase"/>/home/ian/public_html 和/home/jbrittain/public_html.
如果是window可能是:C:\home. Listener标签需要写在Host标签的下,注意它重写host而不是context,例如上下文名字如tomcatbook,
http://localhost/~ian将会有效,而http://localhost/tomcatbook/~ian将会404异常
例子:
1、在server.xml配置
2、在C盘创建相应目录和文件
3、开启tomcat服务然后用浏览器输入网址 http://localhost:8080/~jack/login.html
效果:15、Tomcat自带案例
在目录CATALINA_HOME/weabpps下16、通用网关接口Common Gateway Interface(CGI)
简单来说理解将各种肉变成香肠的机器, 通用网关接口是将脚本变成html页面返回。
具体可以参考单独写一个博客:
tomcat cgi开启解析python脚本17、下载历史版本tomcat
如果需要下载tomcat历史版本:https://archive.apache.org/dist/tomcat/tomcat-9/ 把数字改一下就行了18、进入tomcat管理图形界面
http://localhost:8080/manager/html 密码可以查看 与servlet.xml同一级目录下tomcat-user.xml文件中,好像默认账户:admin 密码:password
相关文章推荐
- nginx 整合tomcat 配置 学习笔记
- 第二章--第一节:软件的生命周期和配置管理(软件构造学习笔记)
- CentOS7.3+Nginx+多个Tomcat服务器转发配置搭建笔记
- nginx+memcache+tomcat配置(新手笔记)
- Tomcat 7学习笔记之配置Web界面管…
- Tomcat安装与配置的一点笔记
- linux 下tomcat配置笔记
- JAVA WEB学习笔记(二):Tomcat服务器的安装及配置
- 《How_Tomcat_Worsk》第二章笔记 一个简单的servlet容器
- Tomcat学习笔记 - 错误日志 - Tomcat安装版安装后第二次启动后闪退(转)-- javac不是内部或外部命令 -- 配置java环境教程
- [知了堂学习笔记]_牵线Eclipse和Tomcat第一篇 —— 配置Java环境变量&&安装eclipse
- servlet学习笔记10——tomcat配置(连接池)
- JAVA学习笔记——第二章 Eclipse的下载安装以及配置和启动
- 【2015/4/21】servlet学习笔记7---tomcat的配置(数据源和连接池)
- 从零开始写javaweb框架笔记4-在IDEA中配置Tomcat
- linux下配置tomcat笔记
- Tomcat配置-学习笔记5---https加密连接器
- HappyAA服务器部署笔记1(nginx+tomcat的安装与配置)