在弹簧启动时将控制从一个控制器重定向到另一个控制器

时间:2017-09-02 08:29:17

标签: spring spring-boot spring-security spring-security-oauth2

我正在尝试将控件从一个控制器重定向到另一个控制器,但它没有发生。我查看了之前的stackoverflow问题,但他们的解决方案在我的情况下不起作用。

我的控制器

@RestController
@RequestMapping( "/rest/auth" )
public class UnprotectedController extends AbstractController {

@Autowired
private UserServices userService;

@Autowired
private RequesterService requesterService;


@RequestMapping(value = "/login",method = RequestMethod.POST)
public ModelAndView login(HttpServletRequest request, HttpServletResponse response)
{
    return new ModelAndView("redirect:/login");
}
}

Postman如果我点击http://localhost:8090/login,我会收到有效回复。但如果我点击http://localhost:8090/rest/auth/login,我就会收到错误

{
"timestamp": 1504340884618,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/login"

}

控件似乎没有重定向到指定的redirect url。为什么会这样?

http://localhost:8090/loginspring security验证用户凭据并创建Security Context

的路径

1 个答案:

答案 0 :(得分:0)

嗯,我想你可以用另一种方式做到这一点。通过使用这个HttpServletResponse,你可以作为一个参数。

response.sendRedirect("/login");

但是,它会引发两种类型的异常,所以try / catch也必须同样。

您遇到的问题是您在控制器上使用@RestController注释,它为所有方法提供@ResponseBody注释,我认为您不能将ModelAndView作为响应主体返回。

尝试返回类似

的字符串
return "redirect:/login"

return "forward:/login";