在Spring Boot中将控制权从一个控制器重定向到另一个控制器

3

我想把控制权从一个控制器重定向到另一个控制器,但是没有成功。我查阅了以前的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"

控制似乎没有重定向到指定的重定向URL,这是为什么?

http://localhost:8090/loginSpring Security验证用户凭据并创建安全上下文的路径。


这个与您有关吗?https://dev59.com/j1gR5IYBdhLWcg3ww_ze - Pramod S. Nikam
这就是我所做的。但它没有起作用。 - Naanavanalla
你正在使用哪个版本的Spring Security? - CHiRAG
它发出了一个 POST 请求... 那么没有什么诀窍可以实现这个功能吗? - Naanavanalla
如果Postman进行了“POST /login”操作,那么我错了,它应该可以工作。请展示你的Spring Security配置,也许问题就在那里。 - dur
1个回答

0

嗯,我认为你可以用另一种方式来实现。通过使用作为参数的HttpServletResponse。

response.sendRedirect("/login");

然而,它会抛出两种类型的异常,因此必须使用try/catch。

你遇到的问题是在控制器上使用了@RestController注释,这会给所有方法一个@ResponseBody注释,我认为你不能将ModelAndView作为响应体返回。

尝试使用类似以下代码返回一个字符串

return "redirect:/login"

或者

return "forward:/login";

我尝试了,但它显示:{ "timestamp": 1504522158996, "status": 404, "error": "Not Found", "message": "无可用信息", "path": "/login" } - Naanavanalla
检查两件事情。当您的应用程序启动时,请查看日志中显示的所有映射。您应该在那里找到您的控制器映射。如果没有,它们就没有被扫描捕获。另外,请尝试路由。也许您需要添加一个绝对映射,例如“http://localhost:8080/login”。 - Urosh T.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接