登录后 Spring MVC 控制器重定向到某个 URL

Posted

技术标签:

【中文标题】登录后 Spring MVC 控制器重定向到某个 URL【英文标题】:Spring MVC controller redirect to some URL after login 【发布时间】:2012-12-28 23:44:43 【问题描述】:

我有一个带有如下处理程序的 Spring MVC 控制器:

@RequestMapping(value = "/account/login", method = RequestMethod.GET)
public String login() 
    return "login";



@RequestMapping(value = "/account/login", method = RequestMethod.POST, params = "login")
public String login(@RequestParam(value = "username") String username, 
        @RequestParam(value = "password") String password) 

    // do authentication
    return "home";

login.html 页面中的表单 POST 到帐户/登录(相同的 url)。我希望在身份验证后,我将用户重定向到我的应用程序的主页,以便他在地址栏中看到www.mywebappexample.com 而不是www.mywebappexample.com/account/login。当我从登录方法返回字符串时,它会呈现正确的 html,但我没有要显示的 URL。如何重定向?

编辑:我必须在我的控制器返回字符串前面加上redirect:。如果您有一个子类 UrlBasedViewResolver UrlBasedViewResolver 的视图解析器,则此方法有效。 Thymeleaf 的视图解析器没有这样做,但它确实具有行为 -> ThymeleafViewResolver。这是我的 servlet-context.xml(我使用的是 thymeleaf):

<bean id="templateResolver"
      class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
    <property name="prefix" value="/WEB-INF/"/>
    <property name="suffix" value=".html"/>
    <property name="templateMode" value="HTML5"/>
</bean>

<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
    <property name="templateResolver" ref="templateResolver"/>
</bean>

<bean id="viewResolver" class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
    <property name="templateEngine" ref="templateEngine"/>
    <property name="order" value="1"/>
</bean>

【问题讨论】:

【参考方案1】:

您可以在标签中使用重定向来更新浏览器窗口中的 URL:

return "redirect:home";

【讨论】:

这不是这样做的,但我假设这是因为我使用 Thymeleaf 作为我的 ViewResolver。重定向不需要其他解析器吗? 那个没用过。试试org.springframework.web.servlet.view.InternalResourceViewResolver 稍微玩弄一下,它就奏效了。如果有兴趣,请查看我的编辑。 +1: InternalResourceViewResolver 也扩展了 UrlBasedViewResolver,但可能没有您需要的所有功能。 :)【参考方案2】:

检查认证是否成功,然后通过请求调度器转发请求

RequestDispatcher rd = servletContext.getRequestDispatcher("/pathToResource");
 rd.forward(request, response);

【讨论】:

我真的不想降到那个水平。如果可能的话,我想把它留给 Spring。

以上是关于登录后 Spring MVC 控制器重定向到某个 URL的主要内容,如果未能解决你的问题,请参考以下文章

在 POST 数据中从 Api 控制器重定向到 MVC 控制器

从 ASP.NET MVC 控制器重定向到外部 URI

在 ASP.NET MVC 中使用 AJAX 方法时使用 C# 控制器重定向到页面

在spring boot中将控制从一个控制器重定向到另一个控制器

Javascript发布请求回调,从.NET MVC控制器重定向

从基本控制器重定向到操作方法