如何自动定向到“我的网络应用程序”从“根(/)”开始JBoss 中的上下文?

发布于 2024-11-02 07:20:08 字数 1344 浏览 6 评论 0原文

我正在使用 JBoss 6.0 。

我已在网络上下文“/test”下部署了我的网络应用程序:myApp.ear。 因此,在 browser-url 中,如果我输入“http://localhost:8080/test/”,我确实得到了登录页面 (myLogin.jsp)。

由于我的 WAR 存在于 EAR 文件内,因此我已使用 Web 模块内的 context-root 元素在 application.xml 文件中指定了上下文根 - 即

<module>
    <web>
        <web-uri>myWeb.war</web-uri>
        <context-root>/test</context-root>
    </web>
</module>

我的问题如何从“根上下文”自动引导用户到我的网络应用程序?

我的意思是,如果用户输入“http://localhost:8080/”,我希望要加载我的 Web 应用程序的登录页面(而不是 JBoss 的默认 ROOT.war 的 index.html 页面)。

我从 {JBOSS}\server\default\deploy\ROOT.war 中删除了现有的 index.html 并在那里创建了一个 login.jsp。现在,当我输入 http://localhost:8080/ 时,我可以看到“login.jsp”被调用。但我无法将用户请求重定向到我的网络应用程序的登录页面。

在那个login.jsp中,我尝试过: ,但我收到错误:“HTTP Status 404 - /test”。

如果我像 那样调用,我仍然会收到相同的 404 错误。

任何人都可以建议如何实现从根上下文自动定向到我的网络应用程序吗?

I am using JBoss 6.0 .

I have deployed my web application: myApp.ear under the web-context: "/test".
So in browser-url if I type "http://localhost:8080/test/", I do get my login page (myLogin.jsp).

Since my WAR exists inside a EAR file, I have specified the context root in the application.xml file using a context-root element inside of the web module - i.e.

<module>
    <web>
        <web-uri>myWeb.war</web-uri>
        <context-root>/test</context-root>
    </web>
</module>

My question is how to auto direct user to my web-app from "root context"?

I mean if user types "http://localhost:8080/", I would expect my web-application's login page to load (instead of JBoss's default ROOT.war's index.html page).

I deleted existing index.html from {JBOSS}\server\default\deploy\ROOT.war and created a login.jsp there. Now I can see that "login.jsp" is getting invoked when I type http://localhost:8080/. But I can not redirect user-request to my web-app's login page.

In that login.jsp, I have tried with:
<jsp:forward page="/test" />, but I get error: "HTTP Status 404 - /test".

If I invoke like <jsp:forward page="/test/myLogin.jsp" /> I still get the same 404 error.

Can any one suggest how to achieve the auto-direct to my web-app from root-context?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

羁〃客ぐ 2024-11-09 07:20:08

您需要将 index.html 保留在默认部署文件夹中并将请求转发到您的 Web 模块。

例如,仅在index.html中保留以下行

<META HTTP-EQUIV="Refresh" CONTENT="0; URL=/test/"/> 

You need to keep index.html in default deploy folder and forward request to your web module.

For example keep following line only in index.html

<META HTTP-EQUIV="Refresh" CONTENT="0; URL=/test/"/> 
破晓 2024-11-09 07:20:08

Senthil 的答案效果很好,但用户可以看到浏览器完成的实际重定向(页面闪烁)。重定向也可以通过重写 [1, 2] JBoss 服务器的功能,支持 30x 代码的 HTTP 重定向(无眨眼)。

您可以直接将重写添加到您的应用程序(web.xmljboss-web.xml)并在 rewrite.properties 中指定重定向规则> - 此处未显示。

或者您可以自行修改服务器配置,而无需触及原始应用程序。我发现这个解决方案很方便,因为应用程序保持完整。

用例:我们将其用于 EJBCA 部署(不是我们的应用程序),它将其上下文根设置为 /ejbca。我们希望保留打包的 ant 脚本提供的默认部署过程,同时我们希望添加从 //ejbca 作为某种默认值,以方便用户使用。如果用户想要更改它,只需修改 standalone.xml 即可完成,无需重新部署整个应用程序。

编辑standalone.xml:

<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" native="false">
    <virtual-server name="default-host" enable-welcome-root="true">
        <alias name="localhost"/>
        <rewrite pattern="^/$" substitution="/test" flags="L,QSA,R" />
    </virtual-server>
</subsystem>

The answer from Senthil works nice, but user could see the actual redirect done by the browser (page blinks). The redirect can be done also with rewrite [1, 2] functionality of the JBoss server, which supports HTTP Redirect with 30x codes (no blink).

You can either add the rewrite to your app directly (web.xml, jboss-web.xml) and specify the redirect rules in rewrite.properties - not shown here.

Or you can modify the server configuration on it's own without touching the original application. I find this solution handy because the application is left intact.

Use case: We use this for EJBCA deployment (not our app), it sets it's context root to /ejbca. We want to preserve the default deployment process provided by the packaged ant script while in the same time we would like to add a redirect from / to /ejbca as some kind of default, for user friendliness. If user wants to change it, it's done simply by modifying standalone.xml without need to redeploy the whole app.

Edit standalone.xml:

<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" native="false">
    <virtual-server name="default-host" enable-welcome-root="true">
        <alias name="localhost"/>
        <rewrite pattern="^/$" substitution="/test" flags="L,QSA,R" />
    </virtual-server>
</subsystem>
梦里南柯 2024-11-09 07:20:08

这在 Wildfly 26.1.1 和 JBoss EAP 7.4 上对我有用。

    <subsystem xmlns="urn:jboss:domain:undertow:12.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" statistics-enabled="${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}">
        <buffer-cache name="default"/>
        <filters>
            <rewrite name="myfilter" redirect="true" target="/myapp/"/>
        </filters>
        <server name="default-server">
            <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
            <https-listener name="https" socket-binding="https" ssl-context="applicationSSC" enable-http2="true"/>
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <http-invoker http-authentication-factory="application-http-authentication"/>
                <filter-ref name="myfilter" predicate="path('/')"/> 
            </host>
        </server>
        <servlet-container name="default">
            <jsp-config/>
            <websockets/>
        </servlet-container>
        <handlers>
            <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
        </handlers>
        <application-security-domains>
            <application-security-domain name="other" security-domain="ApplicationDomain"/>
        </application-security-domains>
    </subsystem>

看起来很多,但实际上并非如此。我的解决方案显示默认配置,我只需添加 部分和

请注意 部分必须位于 之上,否则 JBoss 会在启动时抱怨。 https://access.redhat.com/solutions/2996371 中没有记录这一点,但之后我发现的所有 https://docs.wildfly.org/19/wildscribe/subsystem/undertow/index.html

jboss-cli 中,这意味着:

/subsystem=undertow/configuration=filter/rewrite=myfilter/:add(redirect=true, target=/myapp)
/subsystem=undertow/server=default-server/host=default-host/filter-ref=myfilter/:add(predicate="path('/')")

自动生成的standalone.xml 的结构与上面不完全相同,但也能正常工作。

This has worked for me on Wildfly 26.1.1 and JBoss EAP 7.4.

    <subsystem xmlns="urn:jboss:domain:undertow:12.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" statistics-enabled="${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}">
        <buffer-cache name="default"/>
        <filters>
            <rewrite name="myfilter" redirect="true" target="/myapp/"/>
        </filters>
        <server name="default-server">
            <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
            <https-listener name="https" socket-binding="https" ssl-context="applicationSSC" enable-http2="true"/>
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <http-invoker http-authentication-factory="application-http-authentication"/>
                <filter-ref name="myfilter" predicate="path('/')"/> 
            </host>
        </server>
        <servlet-container name="default">
            <jsp-config/>
            <websockets/>
        </servlet-container>
        <handlers>
            <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
        </handlers>
        <application-security-domains>
            <application-security-domain name="other" security-domain="ApplicationDomain"/>
        </application-security-domains>
    </subsystem>

It looks like much but actually is not. My solution shows the default configuration, I just had to add the <filters> section and the <filter-ref>.

Be aware the <filters> section must come above <server> otherwise JBoss will complain at startup. This was not documented at https://access.redhat.com/solutions/2996371 but after all I found https://docs.wildfly.org/19/wildscribe/subsystem/undertow/index.html.

In jboss-cli this means:

/subsystem=undertow/configuration=filter/rewrite=myfilter/:add(redirect=true, target=/myapp)
/subsystem=undertow/server=default-server/host=default-host/filter-ref=myfilter/:add(predicate="path('/')")

The automatically generated standalone.xml does not have exactly the same structure as above but works as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文