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

如何忽略登录表单上的Spring数据验证?

梁祯
2023-03-14

我正在使用Spring MVC制作一个webapp
我的用户模型

public class User {

@NotNull(message="First name cannot be blank")
@Size(min=2, max=30, message="First name must be between 2 and 30 characters")
private String firstName;

@NotNull(message="Last name cannot be blank")
@Size(min=2, max=30, message="Last name must be between 2 and 30 characters")
private String lastName;

@NotNull(message="Email cannot be blank")
@Size(min=10, max=50, message="Email must be between 10 and 50 characters")
private String email;

@NotNull(message="Phone number cannot be blank")
@Size(min=10, max=11, message="Phone number must be between 10 and 11 characters")
private String phoneNum;

@NotNull(message="Username cannot be blank")
@Size(min=3, max=30, message="Username must be between 2 and 30 characters")
private String username;

@NotNull(message="Password cannot be blank")
@Size(min=5, max=50, message="Password must be between 5 and 50 characters")
private String password;


public User(String username, String password)
{
    super();
    this.username = username;
    this.password = password;
}
/**
 * 
 */
public User() {
    super();
}
/**
 * @param firstName
 * @param lastName
 * @param email
 * @param phoneNum
 * @param username
 * @param password
 */
public User(String firstName, String lastName, String email, String phoneNum, String username, String password) {
    super();
    this.firstName = firstName;
    this.lastName = lastName;
    this.email = email;
    this.phoneNum = phoneNum;
    this.username = username;
    this.password = password;
}

我的注册有所有这些字段的表单输入,但是登录只使用用户名和密码。项目需要所有字段。我将登录表单设置为使用接受用户名和密码的构造函数。提交时,它遵循所有用户模型变量的数据验证。登录控制器:

@RequestMapping(path="login", method=RequestMethod.GET)
public ModelAndView displayLoginForm()
{
    return new ModelAndView("login", "user", new User("", ""));
}


@RequestMapping(path="loginuser", method=RequestMethod.POST)
public ModelAndView loginUser(@Valid @ModelAttribute("user")User u, BindingResult result)
{
    if(result.hasErrors())
    {
        return new ModelAndView("login", "user", u);
    }

是否可以告诉方法忽略除用户名和密码之外的所有变量?

共有1个答案

苏涛
2023-03-14

我认为没有办法,然而,我能建议的是改变方法。

创建一个名为AuthUser的新POJO,该POJO只有用户名和密码可供验证。

您的web应用程序将受益于传递给控制器的“更瘦”对象,如果该对象是有效用户,则使用该AuthUser访问数据库以使用查询检索适当的用户。

由于您正在尝试填充控制器中已经存在的模型,因此您尝试执行的操作不是一个好的实践。这应该是数据库的责任。我建议您也看看DTO设计模式,它可能会对您有所帮助。

 类似资料:
  • 问题内容: 我正在一个springMVC项目中,其中用户身份验证基于Spring安全性。 这个想法是要拥有一个移动(android)应用程序,以便能够将某种数据发送到后端。 因此,在开始开发android之前,我决定使用cURL模拟登录表单的情况。 我们网站上的登录表单如下: 我使用以下命令: 但是我将获得登录页面,换句话说,我无法根据模拟情况通过用户身份验证。 只需注意:对于每一个请求,spri

  • 我在Android中开发了一个登录表单。我在这里使用了验证。我必须填写任何人(用户名或密码),然后我的应用程序应该显示成功!并应转移到其他活动。 但是,如果两个字段都为空,则不应显示成功消息,而应显示Login fail!!!。 请帮我这个。 这是我的webservice代码:

  • 在控制台中写入函数:anonymousUser true[ROLE_ANONYMOUS] 并且应该是user1 true[ROLE_USER]user1

  • 问题内容: 我目前有一个看起来像这样的设置: spring-security.xml: web.xml: 这一切似乎都按预期工作,但是在特殊情况下,如果用户传递特殊令牌,我希望绕过登录页面。因此,当前,如果用户转到诸如的url /dog,他们将看到登录页面,如果传递了的凭据,foo/bar则他们将登录并看到与相对应的页面/dog。 我希望能够使用这样的URL,例如URL /dog?token=ab

  • 根据,我使用基本和基于表单的身份验证配置了Spring Security。 我希望下的endpoint不要使用基于表单的安全性。之外的其他endpoint应使用基于表单的登录。我想要一个响应,发送给那些没有在下提供凭据的endpoint的任何调用。 更新:感谢卢克·泰勒在下面的评论,我想出了以下解决方案。 注意:此技术仅适用于Spring Security 3.1。 首先,我挑出。我们从不创建会话

  • 我正在尝试使用Spring boot 2.3.1 Spring security 7做一个webapp。现在,我的主要目标是,如果用户想要登录(使用定制的angular登录页面),前端会将数据(用户名和密码)发送到后端,我想在那里进行身份验证,并向前端发回一条消息(比如:OK message或其他) 我的项目是这样工作的:用maven我构建角前端,从“dist”文件夹中复制文件/文件夹并放入后端资