当前位置: 首页 > 知识库问答 >
问题:

Spring MVC以正确的方式通过一个链接调用不同的方法

终安和
2023-03-14

我尝试用Spring Security创建登录页面。我需要实现某种类型的登录。登录的URL必须相同。例如

我打开主登录页面-< code > localhost:8080/log in

然后我输入一些信息并按下“下一步”按钮

我移动到本地主机:8080/默认/登录

在这个页面上,我有两种类型的登录-通过ip、通过短信、通过等等。如果我按下按钮“通过ip”,我需要看到url-localhost:8080/default/login

但调用控制器方法登录ByIp();

如果我按按钮"通过短信"我需要看到网址-localhost:8080/default/login

但调用控制器方法登录BySms();

我找到了解决办法

@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">

它有效。但我认为这是不好的做法,或者可能存在更容易或正确的一面。

共有1个答案

白弘伟
2023-03-14

由于您指的是两个不同的操作,在我看来,最好的方法是为它们分配不同的 REST endpoint

  • 短信:/默认/登录/通过短信
  • ip: /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
}

因此,它将更容易理解/维护。

否则,您的方法也会奏效。

 类似资料:
  • 关于SpringWebFlux的小问题,以及如何“链接”http调用。 通过一个具体的例子,这里是一个非常简单的SpringMVC示例,带有一个rest模板。 在这个片段中,我们看到了非常简单的内容。仅初始化一个rest模板。 超文本传输协议请求有效载荷对象的构造。 使用所构建的对象来查询第一外部web应用API以获得响应。 重要的是,需要第一个HTTP调用的响应来进行第二个HTTP调用。它们只能

  • 问题内容: 在我的插件中,我有一些jQuery- Ajax代码,用于处理表单数据,并在单击按钮后立即将其添加到数据库中。由于许多人的插件文件夹路径不同,所以我想知道是否有某种方式可以标准化指向数据处理PHP文件的URL。请参阅下面的示例: 问题答案: 在WordPress中,所有AJAX请求都必须发送到以下URL: 您不应该直接向插件或主题目录中的文件发出AJAX请求。 另外,请勿对上面的URL进

  • 我们在我们的项目中使用连接池。我们在我们的项目中看到,在连接关闭后,语句也会关闭。我知道在连接池的情况下,连接关闭后,到数据库的物理连接不会关闭,而是返回到池进行重用。所以我的问题是: 如果在连接关闭后关闭语句会发生什么?语句是否会正确关闭/关闭连接是否会关闭所有语句,关闭语句是多余的/语句是打开的,尽管连接返回到池中,但由于打开语句,它是不可重用的?(我们同时使用Statement和Prepar

  • 问题内容: 当每个呼叫都取决于之前的呼叫是否已完成时,我试图找到创建异步呼叫的最佳方法。目前,我通过递归调用定义的流程函数来链接方法,如下所示。 这就是我目前正在做的。 然后我将其称为如下 虽然这对我来说非常好,但我不禁认为必须有一种更好(更简单)的方法。以后我的递归调用变得太深时,会发生什么? 注意 :我不是在浏览器中使用javascript,而是在Titanium框架中使用本机,这类似于Nod

  • 我想创建一个和稍后在其上的推送元素,如: 推荐的方法是什么? 谢谢!

  • 问题内容: 我一直在努力,但是我不明白。我是编程新手,所以几乎每个新步骤都是一个实验。尽管在没有参数/返回值的情况下调度正常的闭包没有问题,但到目前为止,我还不了解如何处理带有(多个)参数并最终返​​回的函数。 为了弄清楚适当的“解决方法”的逻辑,如果有人可以发布一个实际的示例,这样我就可以确定自己是否正确,那就太好了。我将非常感谢您提供的任何帮助…如果其他一些实际示例以更好的方式说明了该主题,请