如何根据 grails 中的 url 重定向到特定视图

Posted

技术标签:

【中文标题】如何根据 grails 中的 url 重定向到特定视图【英文标题】:How can I redirect to a particular view based on url in grails 【发布时间】:2017-07-02 15:36:57 【问题描述】:

我正在使用grails 2.5.5 版本,假设我输入的网址为www.localhost:8080/app-name,那么它应该打开MyHome.gsp,假设如果我提供其他网址例如:demo1.localhost.com:8080/app-name,那么它应该重定向到某个登录页面,例如@ 987654326@。我该怎么做?

【问题讨论】:

我强烈建议您创建一个基本的 grails 应用程序,设置 spring 安全性并按照基本说明如何启动和运行它 - spring security 默认情况下会执行此操作 - 如果您点击未经授权的页面重定向到登录页面 实际上我有一个应用程序,www.localhost:8080/app-namedemo1.localhost.com:8080/app-name 都显示相同的MyHome.gsp 但现在每当单击 om demo1.localhost.com:8080/app-name 它应该重定向到login.gsp 登录后它显示相同的@987654332 @.. 我找到了 localhost:8080/app-name/example 之类的 spring-security,但我的 url 包含不同,它不在 app-name/ 之后 所以你的问题措辞完全不正确,那么你的意思是:spring security preserve url after login尝试谷歌搜索***.com/questions/6968210/… 实际上您没有清楚地了解我的问题,它与登录和身份验证无关,也与login 之后无关。它基于 url,我应该得到不同的视图页面,但我的 url 不像 app-name/exp1app-name/exp2。它就像localhost:8080/app-namedemo1.localhost.com:8080/app-namedemo2.localhost.com:8080/app-name。 url 在 localhost 之前而不是在 app-name 之后有变化。 【参考方案1】:

让我为你分解一下:

假设我有www.localhost:8080/app-name

如果我提供其他网址例如:demo1.localhost.com:8080/app-name

您的应用从这里开始:

案例一:/app-name 案例2:/app-name

该 url 的其余部分实际上是 DNS 并配置绑定 tomcat 特定或通配符 url 到给定的应用程序。

简而言之,您需要在应用程序parse url 中过滤整个网址并相应地在您的应用程序中重定向。

然后您需要使用 grails 2 拦截每个 url,其中有 SecurityFilters,据我所知,它可以与 apache-shiro 一起使用,也可以与 spring security 一起使用。

你需要在其中全面检查类似的东西

URL url = new URL(request.getRequestURL().toString())
                String subdomain=url.host
                if (subdomain.contains('.')) 
                    subdomain= subdomain.split('.')[0]
                
that then returns your `demo1` you then redirect it another url if it matches your specific rule.

但正如我所说,您在这里谈论的是肤浅的东西,因为我表达了地址是什么或 somone 如何访问应用程序与实际应用程序无关。这就是为什么 IT 是大企业。大生意不是因为每个人都试图将所有事情缩小到一个盒子里做所有这些,而是​​因为当这种情况发生时需要更大的思考,即我是否需要一个像 F5 这样的负载均衡器,它将根据给定的 url 拆分流量并发送到另一个请求授权的应用容器。

subdomain= subdomain.split('.')[1] 在这种情况下,但这会留下错误的空间,因为用户可以输入 demo1.somedomain.com,如果解决得好,它要么被 subdomain= subdomain.split('.')[0] 分割

然后我会这样做

String subdomain=url.host

                    if (subdomain.contains('.')) 
                        def splitter= subdomain.split('.')
                        subdomain= splitter[0]
                        if (subdomain=='www' && splitter.size()>1) 
                              subdomain= splitter[1] 
                        
                    

【讨论】:

谢谢,它在本地运行良好,但是在生产端,实际 url 类似于 www.somedomain.com 而我的客户端 url 类似于 www.demo1.somedomain.com 在这种情况下是 url.host 的输出是www.demo1.somedomain.com,如果客户端点击www.somedomain.com,我将重定向到MyHome.gsp,否则Login.gsp。不能保证最后一定是.com,可能是.org.co.in

以上是关于如何根据 grails 中的 url 重定向到特定视图的主要内容,如果未能解决你的问题,请参考以下文章

如何根据符合特定条件的国家/地区代码重定向URL

使用 Spring Security 和 Grails 注销后如何将用户重定向到不同的页面

nginx如何将url重定向到特定页面

未重定向到 Codeigniter 4 中的特定 URL

grails无法在此处发出重定向(..)。当url参数包含尖括号时,先前调用重定向(..)

如何在访问主页时将用户重定向到特定 URL?