Spring mvc SpringMVC的正确方式是通过一个链接调用不同的方法
我尝试使用spring security创建登录页面。我需要实现某种类型的登录。和登录的URL必须相同。例如 我打开登录主页-Spring mvc SpringMVC的正确方式是通过一个链接调用不同的方法,spring-mvc,model-view-controller,spring-boot,Spring Mvc,Model View Controller,Spring Boot,我尝试使用spring security创建登录页面。我需要实现某种类型的登录。和登录的URL必须相同。例如 我打开登录主页-localhost:8080/登录 然后我输入一些信息并按下“下一步”按钮 我移动到localhost:8080/default/login 在这个页面上,我有两种类型的登录-通过ip、通过sms、通过等。如果我按“通过ip”按钮,我需要查看url-localhost:8080/default/login 但是调用控制器方法loginByIp() 如果我按“通过短信”按钮
localhost:8080/登录
然后我输入一些信息并按下“下一步”按钮
我移动到localhost:8080/default/login
在这个页面上,我有两种类型的登录-通过ip、通过sms、通过等。如果我按“通过ip”按钮,我需要查看url-localhost:8080/default/login
但是调用控制器方法loginByIp()代码>
如果我按“通过短信”按钮,我需要查看url-localhost:8080/default/login
但是调用控制器方法loginBySms()代码>
我找到了解决办法
@RequestMapping(value = "/default/login", params = "sms", method = RequestMethod.POST)
public ModelAndView sms(@RequestParam String msisdn) {
//login by sms
}
及
在页面的表单中,我创建了隐藏参数
<input class="form-control" name="type" value="ip" type="hidden"/>
或
在我打电话给你的每一张表格里
<form action="/default/login" method="post">
它起作用了。但我认为这是一种不好的做法,或者可能存在更容易或正确的一面 由于您指的是两种不同的操作,我认为最好的方法是为它们指定不同的REST端点
- 短信:
/default/login/by sms
- ip:
/default/login/by ip
然后表格看起来像:
<form action="/default/login/by-ip" method="post">...</form>
...
<form action="/default/login/by-sms" method="post">...</form>
因此,它将更容易理解/维护
否则,您的方法也会起作用。因为您指的是两个不同的操作,我认为最好的方法是为它们指定不同的REST端点
- 短信:
/default/login/by sms
- ip:
/default/login/by ip
然后表格看起来像:
<form action="/default/login/by-ip" method="post">...</form>
...
<form action="/default/login/by-sms" method="post">...</form>
因此,它将更容易理解/维护
否则,您的方法也会起作用。是标准方法。自然权利。但我的任务是展示同样的一面link@Matyas我同意,单一责任原则,不同的行动,不同的终点“显示相同的联系”-你这是什么意思?页面的浏览器URL可能相同,只是表单的操作
不同,用户看不到。此外,成功登录后,您可以在两种情况下重定向到同一页面。这是标准方式。自然权利。但我的任务是展示同样的一面link@Matyas我同意,单一责任原则,不同的行动,不同的终点“显示相同的联系”-你这是什么意思?页面的浏览器URL可能相同,只是表单的操作
不同,用户看不到。此外,成功登录后,您可以在两种情况下重定向到同一页面。
<form action="/default/login/by-ip" method="post">...</form>
...
<form action="/default/login/by-sms" method="post">...</form>
@RequestMapping(value = "/default/login/by-sms", method = RequestMethod.POST)
public ModelAndView loginBySms(@RequestParam String msisdn) {
//login by sms
}
@RequestMapping(value = "/default/login/by-ip", method = RequestMethod.POST)
public ModelAndView loginByIp(@RequestParam String msisdn) {
//login by ip
}