我正在尝试将控件从一个控制器重定向到另一个控制器,但它没有发生。我查看了之前的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/login
是spring security
验证用户凭据并创建Security Context
答案 0 :(得分:0)
嗯,我想你可以用另一种方式做到这一点。通过使用这个HttpServletResponse,你可以作为一个参数。
response.sendRedirect("/login");
但是,它会引发两种类型的异常,所以try / catch也必须同样。
您遇到的问题是您在控制器上使用@RestController注释,它为所有方法提供@ResponseBody注释,我认为您不能将ModelAndView作为响应主体返回。
尝试返回类似
的字符串return "redirect:/login"
或
return "forward:/login";