如何让Wildfly中静态内容优先级高于Geoserver部署以实现重定向?
问题
在Wildfly服务器上运行GeoServer应用,为隐藏敏感信息,希望将用户访问的https://localhost/geoserver端点重定向至https://localhost/geoserver/web。计划通过创建包含meta标签的静态HTML文件实现该重定向,并已在standalone.xml中做了如下配置:
<host name="default-host" alias="localhost"> <location name="/" handler="welcome-content"/> <location name="/geoserver" handler="sub.war"/> <http-invoker security-realm="ApplicationRealm"/> </host> </server> <servlet-container name="default"> <jsp-config/> <websockets/> </servlet-container> <handlers> <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> <file name="sub.war" path="/usr/local/something.ear/sub.war" directory-listing="true"/> </handlers>
但访问/geoserver时,系统直接跳转到GeoServer自身的对应端点,忽略了静态内容配置。将location名称改为非/geoserver的路径时配置能正常生效,推测是部署的GeoServer应用优先级更高。询问是否可以调整优先级让静态内容先被检查?
解决方案
你的推测是对的——Wildfly中部署的Web应用上下文根(这里就是/geoserver)匹配优先级确实高于静态文件handler,直接给/geoserver配置静态handler会被覆盖。这里提供几个可行的解决办法:
方法一:用Wildfly的Rewrite子系统直接做URL重定向
不用依赖静态HTML,直接在Wildfly里配置重写规则,优先级会高于Web应用:
- 打开
standalone.xml,找到<subsystems>节点,添加Rewrite子系统配置(若尚未存在):
<subsystem xmlns="urn:jboss:domain:rewrite:1.0"> <rewrite name="geoserver-redirect"> <rule> <!-- 匹配/geoserver或/geoserver/的请求 --> <condition test="%{PATH_INFO}" pattern="^/geoserver/?$"/> <!-- 重定向到目标路径 --> <action type="redirect" url="/geoserver/web"/> </rule> </rewrite> </subsystem>
- 在
<host name="default-host">节点中,将这个rewrite handler配置在最前面,确保优先匹配:
<host name="default-host" alias="localhost"> <location name="/" handler="geoserver-redirect"/> <location name="/" handler="welcome-content"/> <location name="/geoserver" handler="sub.war"/> <http-invoker security-realm="ApplicationRealm"/> </host>
- 重启Wildfly后,访问
/geoserver就会自动重定向到/geoserver/web。
方法二:修改GeoServer的部署上下文根
把GeoServer部署到非对外暴露的路径,再用静态handler处理/geoserver的重定向:
- 找到GeoServer的部署文件(如
geoserver.war或包含它的EAR包),修改上下文根配置。若是WAR包,可在Wildfly部署目录下创建geoserver.war.xml文件,内容如下:
<jboss-web> <context-root>/geoserver-internal</context-root> </jboss-web>
- 在
sub.war目录下放置重定向静态HTML:
<!DOCTYPE html> <html> <head> <meta http-equiv="refresh" content="0; url=/geoserver-internal/web"> </head> <body> 正在跳转... </body> </html>
- 保持
standalone.xml中/geoserver的location配置不变,重启Wildfly后,用户访问/geoserver会通过静态HTML跳转到GeoServer的实际路径。
方法三:修改GeoServer自身的Web配置
直接在GeoServer内部配置重定向,无需依赖Wildfly的静态handler:
- 找到GeoServer部署目录下的
WEB-INF/web.xml,添加welcome-file配置:
<welcome-file-list> <welcome-file>redirect.html</welcome-file> </welcome-file-list>
- 在GeoServer根目录(与
WEB-INF同级)创建redirect.html,内容同上述重定向HTML: - 重启GeoServer,访问
/geoserver时会自动加载该文件完成重定向。
内容的提问来源于stack exchange,提问作者Jacob Steiner
相关产品推荐
相关产品推荐

