gpt4 book ai didi

jsf - 使用 HTTPS 无法直接访问 protected JSF 页面

转载 作者:行者123 更新时间:2023-11-28 22:21:59 24 4
gpt4 key购买 nike

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

Request protected page displays just a question mark instead of the login page

  1. 此行为只产生 FireFox,IE 工作正常
  2. 没有 SSL,FireFox 也能正常工作。

我正在使用 Tomcat 7.0 和 JSF 2.1 protected 页面是:

  1. SubDir/admin 中的所有内容都需要角色 ADMIN 才能访问
  2. SubDir/customer 中的所有内容都需要角色 CUST 才能访问

奇怪的是,只有访问SubDir/customer 中的部分页面才会显示这个问号!通过尝试访问所有其他页面(包括/admin 中的页面),登录页面会正确显示(所有页面的结构都相同)。

最后,我使用 TCP 端口 443 而不是 8443 使网站正常运行。现在,两种浏览器都可以在有人能够访问 protected 页面之前正确显示登录页面。

所以我的问题。如果使用端口 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>

最佳答案

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

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

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

关于jsf - 使用 HTTPS 无法直接访问 protected JSF 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13673086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com