【问题标题】:Direct access of protected JSF pages doesn't work by using HTTPS使用 HTTPS 无法直接访问受保护的 JSF 页面
【发布时间】:2012-11-20 07:39:06
【问题描述】:

今天我开始在我的 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>

【问题讨论】:

    标签: jsf tomcat ssl https


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,我刚刚将其编辑为 false。如果我输入 URL:https://localhost:8443/BookStore/faces/sections/customer/ 并按回车,浏览器会显示:http://localhost:8443/BookStore/faces/sections/customer/ 和问号再次。所以它会很奇怪地重定向到 http://localhost:8443/.../ 这对我来说毫无意义。
    • 您在问题中声明您使用的是端口 443(标准端口)而不是 8443。将您的浏览器重定向到 https://localhost:443/BookStore/faces/sections/customer / 或只是 https: //localhost/BookStore/faces/sections/customer/。还尝试将以下参数添加到您的 ssl 连接器:keystoreType="JKS"URIEncoding="UTF-8"。 (如果它适合您的密钥库)
    猜你喜欢
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    相关资源
    最近更新 更多