2012-12-28 6 views
4

У меня есть MVC контроллер Spring с обработчиками, как так:Spring MVC контроллер перенаправление к некоторому URL после авторизации

@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 страницы сообщений для учетной записи/логин (тот же URL). Я хотел бы, чтобы после аутентификации я перенаправлял пользователя на главную страницу своего приложения, так что он видит www.mywebappexample.com в адресной строке вместо www.mywebappexample.com/account/login. Когда я возвращаю строку из метода входа, она отображает правильный html, но у меня нет URL-адреса, который я хочу показать. Как я могу перенаправить?

Редактировать: Мне пришлось префикс моего контроллера вернуть строку с redirect:. Это работает, если у вас есть средство определения вида, которое подклассы UrlBasedViewResolver UrlBasedViewResolver. Thymeleaf's view resolver этого не делает, но имеет поведение ->ThymeleafViewResolver. Вот мой сервлет-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> 

ответ

5

Вы можете использовать редирект в теге, а не который должен обновить URL в окне браузера:

return "redirect:home"; 
+0

Это не делает это, но я предполагаю, что это потому, что я использую Thymeleaf как мой ViewResolver. Не перенаправляет ли какой-нибудь другой Resolver? –

+0

Не использовали этот. Попробуйте 'org.springframework.web.servlet.view.InternalResourceViewResolver' – Reimeus

+0

Немного поиграть с этим, и это сработало. Проверьте мои изменения, если они заинтересованы. –

0

Проверьте, если аутентификация прошла успешно, а затем направить запрос с просьбой диспетчером

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

Я бы предпочел не пойти на этот уровень. Я хочу оставить его на весну, если это возможно. –