1

今天我开始在我的 Java EE 项目中实现 SSL。一切正常,直到我尝试使用已注销的客户直接访问受保护的区域。没有被重定向到登录页面,而是出现了一个问号。

请求保护页面只显示一个问号而不是登录页面

  1. 此行为仅产生 FireFox,IE 工作正常
  2. 如果没有 SSL,FireFox 也可以正常工作。

我正在使用 Tomcat 7.0 和 JSF 2.1 受保护的页面是:

  1. SubDir /admin 中的所有内容都需要角色 ADMIN 才能访问
  2. 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&amp;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 &quot;%r&quot; %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>
4

1 回答 1

1

当您尝试在 https 连接上使用 http 时,会出现该问号。您看不到您正在使用的协议,因为 FF 中的默认设置隐藏了协议。

在浏览器 url 中输入about:config并查找browser.urlbar.trimURLs,并将其设置为false。现在您将在浏览器 url 前面看到http:// 。切换到httpS,问号就会消失。

编辑:您尝试访问的网址显示在选项卡中,它是http而不是https

于 2012-12-02T19:52:10.470 回答