我尝试使用spring security创建登录页面。我需要实现某种类型的登录。登录的URL必须相同。对于考试
我打开主登录页面 - localhost:8080/login
然后我输入一些信息并按下“下一步”按钮
我转到localhost:8080/default/login
在这个页面上,我有两种类型的登录 - 通过ip,按短信,按等。如果我按“按ip”按钮,我需要看到网址 - localhost:8080/default/login
但是在控制器方法loginByIp();
如果我按“按短信”按钮,我需要查看网址 - localhost:8080/default/login
但是在控制器方法loginBySms();
我找到了解决方案
@RequestMapping(value = "/default/login", params = "sms", method = RequestMethod.POST)
public ModelAndView sms(@RequestParam String msisdn) {
//login by sms
}
和
@RequestMapping(value = "/default/login", params = "ip", method = RequestMethod.POST)
public ModelAndView ip(@RequestParam String msisdn) {
//login by ip
}
在页面上的表单中我创建了隐藏的参数
<input class="form-control" name="type" value="ip" type="hidden"/>
或
<input class="form-control" name="type" value="sms" type="hidden"/>
我打电话给每个表格
<form action="/default/login" method="post">
有效。但我认为它是糟糕的practik或可能存在更容易或正确的一面。
答案 0 :(得分:0)
由于您指的是两种不同的操作,我认为最好的方法是为它们分配不同的REST端点
/default/login/by-sms
/default/login/by-ip
然后表格看起来像:
<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
}
因此,理解/维护会更容易。
否则你的方法也会起作用。