⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch13s78.html

📁 详细介绍了jboss3.0的配置等
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<br>
validate:<br>
<br>
fail_if_not_valid:<br>
<br>
init:<br>
Using&nbsp;jboss.dist=/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss<br>
Using&nbsp;classpath=/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/client/ejb.jar:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/client/jaas.jar:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/client/jbosssx-client.jar:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/client/jboss-client.jar:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/client/jnp-client.jar:/tmp/JBoss-2.2.2_Tomcat-3.2.2/tomcat/lib/servlet.jar:/tmp/jaas/build/classes<br>
<br>
compile:<br>
&nbsp;&nbsp;&nbsp;&nbsp;[mkdir]&nbsp;Created&nbsp;dir:&nbsp;/tmp/jaas/build/classes<br>
&nbsp;&nbsp;&nbsp;&nbsp;[javac]&nbsp;Compiling&nbsp;7&nbsp;source&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/classes<br>
<br>
jar1:<br>
&nbsp;&nbsp;&nbsp;&nbsp;[mkdir]&nbsp;Created&nbsp;dir:&nbsp;/tmp/jaas/build/META-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/META-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/META-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[jar]&nbsp;Building&nbsp;jar:&nbsp;/tmp/jaas/build/ssbean1.jar<br>
<br>
war1:<br>
&nbsp;&nbsp;&nbsp;&nbsp;[mkdir]&nbsp;Created&nbsp;dir:&nbsp;/tmp/jaas/build/WEB-INF/classes<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/WEB-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/WEB-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/WEB-INF/classes<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[jar]&nbsp;Building&nbsp;jar:&nbsp;/tmp/jaas/build/tutorial1.war<br>
<br>
ear1:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/META-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[jar]&nbsp;Building&nbsp;jar:&nbsp;/tmp/jaas/build/tutorial1.ear<br>
<br>
jar2:<br>
&nbsp;&nbsp;&nbsp;[delete]&nbsp;Deleting&nbsp;directory&nbsp;/tmp/jaas/build/META-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;[mkdir]&nbsp;Created&nbsp;dir:&nbsp;/tmp/jaas/build/META-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/META-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/META-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[jar]&nbsp;Building&nbsp;jar:&nbsp;/tmp/jaas/build/ssbean2.jar<br>
<br>
war2:<br>
&nbsp;&nbsp;&nbsp;[delete]&nbsp;Deleting&nbsp;directory&nbsp;/tmp/jaas/build/WEB-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;[mkdir]&nbsp;Created&nbsp;dir:&nbsp;/tmp/jaas/build/WEB-INF/classes<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/WEB-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/WEB-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/WEB-INF/classes<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[jar]&nbsp;Building&nbsp;jar:&nbsp;/tmp/jaas/build/tutorial2.war<br>
<br>
ear2:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/jaas/build/META-INF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[jar]&nbsp;Building&nbsp;jar:&nbsp;/tmp/jaas/build/tutorial2.ear<br>
<br>
ears:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/deploy<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/deploy<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[copy]&nbsp;Copying&nbsp;1&nbsp;files&nbsp;to&nbsp;/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/conf/tomcat<br>
<br>
BUILD&nbsp;SUCCESSFUL<br>
<br>
Total&nbsp;time:&nbsp;8&nbsp;seconds</b><br>
							</div>
						</p><p>This has created two ears(tutorial1.ear, tutorial2.ear)
that contain the ejbs and servlet presented earlier and placed them into the
JBoss server deploy directory. It has also replaced the contents of the JBoss
server auth.conf file with the jaas/server_auth.conf file contents. This file
is the same as that show in <a href="ch13s78.html#server.auth.conf" tppabs="http://www.huihoo.org/jboss/online_manual/3.0/ch13s78.html#server.auth.conf" title="Figure 13.10. The JBoss Server JAAS Login Config File&#xA;					($jboss_home/conf/default/auth.conf)">Figure 13.10</a>.</p></li></ol></li><li><a name="d0e11111"></a><p>Start the JBoss/Tomcat server. Go to the jboss/bin
directory of your JBoss/Tomcat bundle installation and execute the
run_with_tomcat.sh for *nix platforms and run_with_tomcat.bat for w32
platforms. A number of messages will be displayed on your console. Some of
the key messages you should see are:</p><div class="literallayout">&nbsp;&nbsp;&nbsp;&nbsp;<br>
					<b>bash-2.04$&nbsp;run_with_tomcat.sh<br>
JBOSS_CLASSPATH=:/lib/tools.jar:run.jar:../lib/crimson.jar<br>
jboss.home&nbsp;=&nbsp;/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss<br>
Using&nbsp;JAAS&nbsp;LoginConfig:&nbsp;file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/conf/tomcat/auth.conf<br>
Using&nbsp;configuration&nbsp;"tomcat"<br>
...<br>
[EmbeddedTomcatSX]&nbsp;Starting<br>
[EmbeddedTomcatSX]&nbsp;Starting&nbsp;EmbeddedTomcatSX....<br>
2001-05-25&nbsp;08:45:45&nbsp;-&nbsp;ContextManager:&nbsp;Adding&nbsp;context&nbsp;Ctx(&nbsp;/examples&nbsp;)<br>
2001-05-25&nbsp;08:45:45&nbsp;-&nbsp;ContextManager:&nbsp;Adding&nbsp;context&nbsp;Ctx(&nbsp;/admin&nbsp;)<br>
[EmbeddedTomcatSX]&nbsp;Starting&nbsp;tomcat.&nbsp;Check&nbsp;logs/tomcat.log&nbsp;for&nbsp;error&nbsp;messages&nbsp;<br>
2001-05-25&nbsp;08:45:46&nbsp;-&nbsp;ContextManager:&nbsp;Adding&nbsp;context&nbsp;Ctx(&nbsp;&nbsp;)<br>
2001-05-25&nbsp;08:45:47&nbsp;-&nbsp;ContextManager:&nbsp;Adding&nbsp;context&nbsp;Ctx(&nbsp;/test&nbsp;)<br>
2001-05-25&nbsp;08:45:49&nbsp;-&nbsp;PoolTcpConnector:&nbsp;Starting&nbsp;HttpConnectionHandler&nbsp;on&nbsp;8080<br>
[EmbeddedTomcatSX]&nbsp;OK<br>
[EmbeddedTomcatSX]&nbsp;Started<br>
...<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;Deploy&nbsp;J2EE&nbsp;application:&nbsp;file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/deploy/tutorial1.ear<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;Create&nbsp;application&nbsp;tutorial1.ear<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;inflate&nbsp;and&nbsp;install&nbsp;module&nbsp;tutorial1.war<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;install&nbsp;module&nbsp;ssbean1.jar<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;add&nbsp;all&nbsp;ejb&nbsp;jar&nbsp;files&nbsp;to&nbsp;the&nbsp;common&nbsp;classpath<br>
[Container&nbsp;factory]&nbsp;Deploying:file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/tmp/deploy/Default/tutorial1.ear<br>
[Verifier]&nbsp;Verifying&nbsp;file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/tmp/deploy/Default/tutorial1.ear/ejb1004.jar<br>
[Container&nbsp;factory]&nbsp;Deploying&nbsp;StatelessSession<br>
[Container&nbsp;factory]&nbsp;lookup&nbsp;securityManager&nbsp;name:&nbsp;java:/jaas/example1<br>
[Container&nbsp;factory]&nbsp;JAAS.Created&nbsp;securityMgr=org.jboss.security.plugins.JaasSecurityManager@114460<br>
[Container&nbsp;factory]&nbsp;JAAS.setCachePolicy,&nbsp;c=null<br>
[Container&nbsp;factory]&nbsp;JAAS.Added&nbsp;example1,&nbsp;org.jboss.security.plugins.JaasSecurityManager@114460&nbsp;to&nbsp;map<br>
[Container&nbsp;factory]&nbsp;Deploying&nbsp;StatefulSession<br>
[Container&nbsp;factory]&nbsp;lookup&nbsp;securityManager&nbsp;name:&nbsp;java:/jaas/example1<br>
[Bean&nbsp;Cache]&nbsp;Cache&nbsp;policy&nbsp;scheduler&nbsp;started<br>
[Container&nbsp;factory]&nbsp;Deployed&nbsp;application:&nbsp;file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/tmp/deploy/Default/tutorial1.ear<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;Starting&nbsp;module&nbsp;tutorial1.war<br>
[Auto&nbsp;deploy]&nbsp;deploy,&nbsp;ctxPath=/jaas-example1,&nbsp;warUrl=file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/tmp/deploy/Default/tutorial1.ear/web1003/<br>
2001-05-25&nbsp;08:45:55&nbsp;-&nbsp;ContextManager:&nbsp;Adding&nbsp;context&nbsp;Ctx(&nbsp;/jaas-example1&nbsp;)<br>
[Auto&nbsp;deploy]&nbsp;AbstractWebContainer.parseWebAppDescriptors,&nbsp;Begin<br>
[Auto&nbsp;deploy]&nbsp;addEnvEntries<br>
[Auto&nbsp;deploy]&nbsp;linkResourceRefs<br>
[Auto&nbsp;deploy]&nbsp;linkEjbRefs<br>
[Auto&nbsp;deploy]&nbsp;Linking&nbsp;ejb-ref:&nbsp;ejb/SecuredEJB&nbsp;to&nbsp;JNDI&nbsp;name:&nbsp;example1/StatelessSession<br>
[Auto&nbsp;deploy]&nbsp;linkSecurityDomain<br>
[Auto&nbsp;deploy]&nbsp;Linking&nbsp;security/securityMgr&nbsp;to&nbsp;JNDI&nbsp;name:&nbsp;java:/jaas/example1<br>
[Auto&nbsp;deploy]&nbsp;AbstractWebContainer.parseWebAppDescriptors,&nbsp;End<br>
[Auto&nbsp;deploy]&nbsp;Initialized:&nbsp;{WebApplication:&nbsp;/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/tmp/deploy/Default/tutorial1.ear/web1003/,&nbsp;URL:&nbsp;file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/tmp/deploy/Default/tutorial1.ear/web1003/,&nbsp;classLoader:&nbsp;AdaptiveClassLoader(&nbsp;&nbsp;):5909743}<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;J2EE&nbsp;application:&nbsp;file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/deploy/tutorial1.ear&nbsp;is&nbsp;deployed.<br>
[Auto&nbsp;deploy]&nbsp;Auto&nbsp;deploy&nbsp;of&nbsp;file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/deploy/tutorial2.ear<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;Deploy&nbsp;J2EE&nbsp;application:&nbsp;file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/deploy/tutorial2.ear<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;Create&nbsp;application&nbsp;tutorial2.ear<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;inflate&nbsp;and&nbsp;install&nbsp;module&nbsp;tutorial2.war<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;install&nbsp;module&nbsp;ssbean2.jar<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;add&nbsp;all&nbsp;ejb&nbsp;jar&nbsp;files&nbsp;to&nbsp;the&nbsp;common&nbsp;classpath<br>
[Container&nbsp;factory]&nbsp;Deploying:file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/tmp/deploy/Default/tutorial2.ear<br>
[Verifier]&nbsp;Verifying&nbsp;file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/tmp/deploy/Default/tutorial2.ear/ejb1006.jar<br>
[Container&nbsp;factory]&nbsp;Deploying&nbsp;StatelessSession<br>
[Container&nbsp;factory]&nbsp;lookup&nbsp;securityManager&nbsp;name:&nbsp;java:/jaas/example2<br>
[Container&nbsp;factory]&nbsp;JAAS.Created&nbsp;securityMgr=org.jboss.security.plugins.JaasSecurityManager@3ac93e<br>
[Container&nbsp;factory]&nbsp;JAAS.setCachePolicy,&nbsp;c=null<br>
[Container&nbsp;factory]&nbsp;JAAS.Added&nbsp;example2,&nbsp;org.jboss.security.plugins.JaasSecurityManager@3ac93e&nbsp;to&nbsp;map<br>
[Container&nbsp;factory]&nbsp;Deploying&nbsp;StatefulSession<br>
[Container&nbsp;factory]&nbsp;lookup&nbsp;securityManager&nbsp;name:&nbsp;java:/jaas/example2<br>
[Container&nbsp;factory]&nbsp;Deployed&nbsp;application:&nbsp;file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/tmp/deploy/Default/tutorial2.ear<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;Starting&nbsp;module&nbsp;tutorial2.war<br>
[Auto&nbsp;deploy]&nbsp;deploy,&nbsp;ctxPath=/jaas-example2,&nbsp;warUrl=file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/tmp/deploy/Default/tutorial2.ear/web1005/<br>
2001-05-25&nbsp;08:45:57&nbsp;-&nbsp;ContextManager:&nbsp;Adding&nbsp;context&nbsp;Ctx(&nbsp;/jaas-example2&nbsp;)<br>
[Auto&nbsp;deploy]&nbsp;AbstractWebContainer.parseWebAppDescriptors,&nbsp;Begin<br>
[Auto&nbsp;deploy]&nbsp;addEnvEntries<br>
[Auto&nbsp;deploy]&nbsp;linkResourceRefs<br>
[Auto&nbsp;deploy]&nbsp;linkEjbRefs<br>
[Auto&nbsp;deploy]&nbsp;Linking&nbsp;ejb-ref:&nbsp;ejb/SecuredEJB&nbsp;to&nbsp;JNDI&nbsp;name:&nbsp;example2/StatelessSession<br>
[Auto&nbsp;deploy]&nbsp;linkSecurityDomain<br>
[Auto&nbsp;deploy]&nbsp;Linking&nbsp;security/securityMgr&nbsp;to&nbsp;JNDI&nbsp;name:&nbsp;java:/jaas/example2<br>
[Auto&nbsp;deploy]&nbsp;AbstractWebContainer.parseWebAppDescriptors,&nbsp;End<br>
[Auto&nbsp;deploy]&nbsp;Initialized:&nbsp;{WebApplication:&nbsp;/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/tmp/deploy/Default/tutorial2.ear/web1005/,&nbsp;URL:&nbsp;file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/tmp/deploy/Default/tutorial2.ear/web1005/,&nbsp;classLoader:&nbsp;AdaptiveClassLoader(&nbsp;&nbsp;):86840}<br>
[J2EE&nbsp;Deployer&nbsp;Default]&nbsp;J2EE&nbsp;application:&nbsp;file:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/deploy/tutorial2.ear&nbsp;is&nbsp;deployed.<br>
...<br>
[Service&nbsp;Control]&nbsp;Started&nbsp;25&nbsp;services<br>
[Default]&nbsp;JBoss&nbsp;2.2.2&nbsp;Started&nbsp;in&nbsp;0m:19s</b><br>
				</div><p>At this point you have the JBoss server running with
the embeded Tomcat servlet engine and the two tutorial ears have been deployed.</p></li><li><a name="d0e11121"></a><p>Test access to the session bean</p><p>At this point the session beans are deployed and only
users with a role of 'Echo' are allowed to execute all home and remote interface
methods of the StatelessSession and StatefulSession beans. There is one user with a
username 'scott' and a password 'echoman' that has this role. We have another user
with a username 'stark' and a password 'javaman' with roles of 'Java' and 'Coder' that 
should not be able to execute any methods of the StatelessSession because he does not
have the required 'Echo' role. He should be able to create and remove StatefulSession
beans and execute the noop method since the role of 'Coder' is allowed these
operations. Lets run through 4 test cases that confirm we have properly secured the
EJBs and servlet using the UsersRolesLoginModule.</p><ol type="a"><li><a name="d0e11127"></a><p>Run the SessionClient as user 'scott' with
password 'echoman'. Do this by executing the following command:</p><div class="literallayout"><br>
							<tt><br>
bash-2.04$&nbsp;ant&nbsp;example1-test0<br>
Searching&nbsp;for&nbsp;build.xml&nbsp;...<br>
Buildfile:&nbsp;/tmp/jaas/build.xml<br>
<br>
example1-test0:<br>
<br>
validate:<br>
<br>
fail_if_not_valid:<br>
<br>
init:<br>
Using&nbsp;jboss.dist=/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss<br>
Using&nbsp;classpath=/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/client/ejb.jar:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/client/jaas.jar:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/client/jbosssx-client.jar:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/client/jboss-client.jar:/tmp/JBoss-2.2.2_Tomcat-3.2.2/jboss/client/jnp-client.jar:/tmp/JBoss-2.2.2_Tomcat-3.2.2/tomcat/lib/servlet.jar:/tmp/jaas/build/classes<br>
<br>
compile:<br>
<br>
client-test0:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[java]&nbsp;+++&nbsp;Running&nbsp;SessionClient&nbsp;with&nbsp;username=scott,&nbsp;password=echoman,&nbsp;example=example1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[java]&nbsp;Created&nbsp;LoginContext<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[java]&nbsp;Found&nbsp;StatelessSessionHome<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[java]&nbsp;Created&nbsp;StatelessSession<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[java]&nbsp;Bean.echo('Hello')&nbsp;-&gt;&nbsp;Hello<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[java]&nbsp;Found&nbsp;StatefulSessionHome<br>
&nbs

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -