今天我开始在我的 Java EE 项目中实现 SSL。一切正常,直到我尝试使用已注销的客户直接访问受保护的区域。没有被重定向到登录页面,而是出现了一个问号。
- 此行为仅产生 FireFox,IE 工作正常
- 如果没有 SSL,FireFox 也可以正常工作。
我正在使用 Tomcat 7.0 和 JSF 2.1 受保护的页面是:
- SubDir /admin 中的所有内容都需要角色 ADMIN 才能访问
- SubDir /customer 中的所有内容都需要角色 CUST 才能访问
奇怪的是,这个问号只有在访问 SubDir /customer 中的某些页面时才会显示!通过尝试访问所有其他人(包括 /admin 中的那些),登录页面将正确显示(所有页面的结构都相同)。
最后,我使用 TCP 端口 443 而不是 8443 使网站正常运行并正常运行。现在,在有人能够访问受保护的页面之前,两个浏览器都能正确显示登录页面。
所以我的问题。如果使用端口 8443,有谁知道为什么会出现这种行为?有没有办法仍然可以使用端口 8443?
您可以在下面找到 tomcats server.xml 文件。提前致谢!
<?xml version="1.0" encoding="UTF-8"?>
<Server
port="8005"
shutdown="SHUTDOWN" >
<Listener
SSLEngine="on"
className="org.apache.catalina.core.AprLifecycleListener" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource
name="UserDatabase"
auth="Container"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml"
type="org.apache.catalina.UserDatabase" />
</GlobalNamingResources>
<Service name="Catalina" >
<Connector
connectionTimeout="20000"
port="8080"
protocol="HTTP/1.1"
redirectPort="443" />
<Connector
SSLEnabled="true"
clientAuth="false"
keystoreFile="C:\Program Files (x86)\apache-tomcat-7.0.30\conf\BookStore.keystore"
keystorePass="myPwd"
maxThreads="200"
port="443"
protocol="HTTP/1.1"
scheme="https"
secure="true"
sslProtocol="TLS" />
<Connector
port="8009"
protocol="AJP/1.3"
redirectPort="443" />
<Engine
name="Catalina"
defaultHost="localhost" >
<Realm className="org.apache.catalina.realm.LockOutRealm" >
<Realm
className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase" />
</Realm>
<Realm
className="org.apache.catalina.realm.JDBCRealm"
connectionURL="jdbc:mysql://localhost/bookstore?user=bookstore&password=book$tore"
driverName="org.gjt.mm.mysql.Driver"
roleNameCol="role"
userCredCol="pwd"
userNameCol="eMail"
userRoleTable="roles"
userTable="customer" />
<Host
name="localhost"
appBase="webapps"
autoDeploy="true"
unpackWARs="true" >
<Valve
className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
pattern="%h %l %u %t "%r" %s %b"
prefix="localhost_access_log."
suffix=".txt" />
<Context
docBase="BookStore"
path="/BookStore"
reloadable="true"
source="org.eclipse.jst.jee.server:BookStore" />
</Host>
</Engine>
</Service>
</Server>