Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用bean登录和注册-springmvc+;冬眠_Java_Spring_Hibernate_Spring Mvc_Login - Fatal编程技术网

Java 使用bean登录和注册-springmvc+;冬眠

Java 使用bean登录和注册-springmvc+;冬眠,java,spring,hibernate,spring-mvc,login,Java,Spring,Hibernate,Spring Mvc,Login,我正在使用SpringMVC和Hibernate开发一个web应用程序,让用户登录到系统以访问内部页面。这是使用检查会话变量的拦截器完成的 我可以正确注册以查找有效值。 但在登录的情况下,我只需要用户名和密码,我在如何使用bean验证登录上遇到了麻烦,因为它指责没有电子邮件等等 这是用户类: @Entity public class User{ @Id @GeneratedValue private int id; @NotNull @Column(n

我正在使用SpringMVC和Hibernate开发一个web应用程序,让用户登录到系统以访问内部页面。这是使用检查会话变量的拦截器完成的

我可以正确注册以查找有效值。 但在登录的情况下,我只需要用户名和密码,我在如何使用bean验证登录上遇到了麻烦,因为它指责没有电子邮件等等

这是用户类:

@Entity
public class User{


    @Id
    @GeneratedValue
    private int id;
    @NotNull
    @Column(name="username",unique=true)
    @Size(min=5)
    private String username;
    @NotNull
    @Email
    private String email;
    @NotNull
    @Size(min=5)
    private String password;
    private String salt;
    private int status;
    private String name;
    private String company;
    private int countryid;
    @DateTimeFormat(pattern="dd/MM/yyyy")
    @Temporal(TemporalType.DATE)
    private Calendar subscriptionDate; 
//Getters and Setters
}
控制员:

@Transactional
@Controller
public class LoginController {

    @Autowired
    UserDao dao;

    // Other Mappings

    @RequestMapping(value = "addUser", method = RequestMethod.POST)
        public String makeRegistration(@ModelAttribute("user") @Valid User user, BindingResult result,
                RedirectAttributes redirectAttributes) {
            if (result.hasErrors()) {
                return "redirect:register";
            }
            if (dao.add(user)) {
                redirectAttributes.addFlashAttribute("user", user);
                return "redirect:login";
            } else {
                return "redirect:register";
            }

        }

        @RequestMapping(value = "enter", method = RequestMethod.POST)
        public String doLogin(@ModelAttribute("user") @Valid User user, BindingResult result, HttpSession session) {
            if (result.hasErrors()) {
                return "redirect:login";
            } else {
                if (dao.authenticate(user)) {
                    session.setAttribute("userLoggedIn", user.getUsername());
                    return "forward:index";
                } else {
                    return "redirect:login";
                }
            }

        }

    \\ Other mappings.
如何使用“User”类进行登录和注册? 我必须使用继承吗?

当然不是继承! 考虑一下数据结构的作用。您需要什么来支持您的登录表单。那么,只需一个
LoginForm
。它是持久数据吗?绝对不是。
LoginForm
用户之间的关系是什么?第一个有助于识别最后一个。现在我认为您应该做的是开发一个带有验证需求的
LoginForm
对象。此对象不会是持久的,但将是一个方法的参数,您将使用该方法检索具有自身验证的持久用户

更确切地说,我将介绍一个新类:

public class LoginForm implements Serializable {

    @NotNull
    @Column(name="username", unique=true)
    @Size(min=5)
    private String username;

    @NotNull
    @Size(min=5)
    private String password;

    //Getters and Setters

}
。。。并修改身份验证方法的签名:

    @RequestMapping(value = "enter", method = RequestMethod.POST)
    public String doLogin(@ModelAttribute("user") @Valid LoginForm loginForm, BindingResult result, HttpSession session) {
        // ...
    }

顺便说一句,我不确定保留密码是否是个好主意。您可以保存散列或确定身份验证是外部目录的域。

我想您应该创建注册和登录控制器,以保持代码干净和简单。让代码看起来很愚蠢,它将很容易维护,并将开放供进一步实现。

你能给出一个具体的例子,让我理解这个想法吗?您的意思是类似“Loginform实现验证器”;“public void Validate(User,Error Error){//validation logic}”是的,现在我可以理解了。作为一个附带问题,我可以在表单中加载:来自验证的错误吗?另外,我正在对所有passwod进行散列,因此是salt字段。这是
BindingResult
的角色,请在此处查看入门: