Glassfish v4 - java 7 - 端口统一 - 错误 - 无法将http重定向到https

时间:2014-08-04 15:18:00

标签: glassfish-4

我正在尝试使用glassfish 4的端口统一将任何http请求重定向到https。我可以轻松地用V3做这个,但我遇到了glassfish v4 - Java 1.7的问题。

我在glassfish v4中执行的命令 -

asadmin create-protocol --securityenabled = false http-redirect asadmin create-protocol-filter --protocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpRedirectFilter redirect-filter

asadmin create-protocol --securityenabled = false pu-protocol asadmin create-protocol-finder --protocol pu-protocol --targetprotocol http-listener-2 --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-finder asadmin create-protocol-finder --protocol pu-protocol --targetprotocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-redirect

set configs.config.server-config.network-config.network-listeners.network-listener.http-listener-1.protocol = pu-protocol

以上所有命令都可以正确执行。但是,当我尝试访问Web时,它会抛出异常并且http地址无法启动 - localhost:8080失败

Glassfish中的例外情况 -

警告:FilterChain执行期间出现异常 java.lang.ClassCastException:org.glassfish.grizzly.memory.HeapMemoryManager $ TrimmableHeapBuffer无法强制转换为org.glassfish.grizzly.http.HttpContent 在org.glassfish.grizzly.config.portunif.HttpRedirectFilter.handleRead(HttpRedirectFilter.java:99) 在org.glassfish.grizzly.filterchain.ExecutorResolver $ 9.execute(ExecutorResolver.java:119) 在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 在org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 在org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 在org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 在org.glassfish.grizzly.portunif.PUFilter.handleRead(PUFilter.java:231) 在org.glassfish.grizzly.filterchain.ExecutorResolver $ 9.execute(ExecutorResolver.java:119) 在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 在org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 在org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 在org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 在org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 在org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100(WorkerThreadIOStrategy.java:55) 在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:564) 在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:544) 在java.lang.Thread.run(Thread.java:722)

如果可以解决这个问题,请注意,还有其他方法可以将端口重定向从http转换为https吗?

2 个答案:

答案 0 :(得分:6)

确保您的上一个命令包含" asadmin" as set是一个DOS命令。

当我使用以下命令时,这对我使用GlassFish 4.0(尽管它看起来与你的非常相似):

asadmin create-protocol --securityenabled=false http-redirect

asadmin create-http-redirect --redirect-port 8181 --secure-redirect true http-redirect

asadmin create-protocol --securityenabled=false pu-protocol

asadmin create-protocol-filter --protocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpRedirectFilter redirect-filter

asadmin create-protocol-finder --protocol pu-protocol --targetprotocol http-listener-2 --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-finder

asadmin create-protocol-finder --protocol pu-protocol --targetprotocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-redirect

asadmin set configs.config.server-config.network-config.network-listeners.network-listener.http-listener-1.protocol=pu-protocol

我注意到这会导致http-listener-1的HTTP选项卡(配置 - > server-config - >网络配置 - >网络侦听器 - > http-listener-1 - - > SSL选项卡)不再显示。对我来说不是问题。

答案 1 :(得分:3)

所以我不确定原因,但是当我使用协议名称pu-protocol时,它将无法正确配置,并且它不会显示在协议列表下的管理控制台中。我所要做的就是为协议使用不同的名称,一切正常。我使用了名称portunif-protocol,一旦我运行命令创建它,就会出现在Protocols部分的Glassfish管理控制台中,正如您所期望的那样。现在,我已根据需要将我的网站重定向到https!

我使用的命令:

asadmin create-protocol --securityenabled=false http-redirect
asadmin create-http-redirect --redirect-port 443 --secure-redirect true http-redirect
asadmin create-protocol --securityenabled=false portunif-protocol
asadmin create-protocol-filter --protocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpRedirectFilter redirect-filter
asadmin create-protocol-finder --protocol portunif-protocol --targetprotocol http-listener-2 --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-finder
asadmin create-protocol-finder --protocol portunif-protocol --targetprotocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-redirect
asadmin set configs.config.server-config.network-config.network-listeners.network-listener.http-listener-1.protocol=portunif-protocol

希望能帮助其他可能遇到同样问题的人。