2012-12-28 6 views
4

J'ai un contrôleur Spring MVC avec des gestionnaires comme ceci:contrôleur Spring MVC rediriger vers une URL après la connexion

@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"; 
} 

La forme dans les pages POSTs login.html pour compte/login (la même URL). Je voudrais que, après l'authentification, je redirige l'utilisateur vers la page d'accueil de mon application, de sorte qu'il voit www.mywebappexample.com dans la barre d'adresse au lieu de www.mywebappexample.com/account/login. Lorsque je renvoie la chaîne à partir de la méthode de connexion, elle affiche le code html approprié, mais je n'ai pas l'URL que je veux afficher. Comment puis-je rediriger?

Editer: Je devais préfixer ma chaîne de retour de contrôleur avec redirect:. Cela fonctionne si vous avez un résolveur d'affichage qui sous-classe UrlBasedViewResolver UrlBasedViewResolver. Le résolveur de vue de Thymeleaf ne fait pas cela mais il a le comportement ->ThymeleafViewResolver. Voici mon servlet-context.xml (j'utilise 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> 

Répondre

5

Vous pouvez utiliser une redirection dans la balise au lieu qui devrait mettre à jour l'URL dans la fenêtre du navigateur:

return "redirect:home"; 
+0

Ce ne le fait pas, mais je suppose que c'est parce que je utilise thymeleaf comme mon ViewResolver. Ne pas rediriger besoin d'un autre résolveur? –

+0

N'a pas utilisé celui-là. Essayez 'org.springframework.web.servlet.view.InternalResourceViewResolver' – Reimeus

+0

Un peu de jeu avec ça et ça a marché. Vérifiez mes modifications si vous êtes intéressé. –

0

Vérifiez si l'authentification a passé avec succès, avant de transmettre la demande avec le répartiteur demande

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

Je préfère vraiment ne pas descendre à ce niveau. Je veux laisser au printemps si c'est possible. –

Questions connexes