Java自学之路-Java中级教程-19:SpringMVC实现密码注册和登录功能

这一节我们在表单里增加name和password两个字段实现密码注册功能,并在注册成功后登录。

首先,需要在jsp页面的表单中增加两个input输入框,名称分别为name和password,类型为text和password。

在PersonController.java中,我们要接收这两个参数,所以PersonForm.java里增加这两个属性变量,并生成getter和setter方法。

private String name;
private String password;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

接收到这两个参数后,要存储到Person类的对象中以保存到数据库。因此,Person.java也需要增加这两个属性,并生成getter和setter方法。


private String name;

private String password;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

在PersonJdbcTemplateDaoImpl.java中要通过sql语句保存这两个属性,所以addPerson和findPersonById两个方法需要相应地修改。


	public int add(Person person) throws Exception {

		int updatedRow = this.getJdbcTemplate().update("insert into new_table (id, nation, information, gender, hobby, name, password) values (?,?,?,?,?,?,?)", person.getId(), person.getNation(), person.getInformation(), person.getGender(), person.getHobby(), person.getName(), person.getPassword());

		return updatedRow;

	}



	public Person getPersonById(String id) throws Exception {

		Map personrMap = this.getJdbcTemplate().queryForMap("select * from new_table where id=? limit 1", id);

		Person person = new Person();

		person.setId((Integer) personrMap.get("id"));
		person.setNation((String) personrMap.get("nation"));
		person.setInformation((String) personrMap.get("information"));
		person.setGender((String) personrMap.get("gender"));
		person.setHobby((String) personrMap.get("hobby"));
		person.setName((String) personrMap.get("name"));
		person.setPassword((String) personrMap.get("password"));

		return person;

	}
最后,在PersonController.java中我们像上一节一样增加一个/reg方法,用于接收提交的信息实现注册。



	@RequestMapping(value = "/reg", method = RequestMethod.POST)
	public Object reg(HttpServletRequest request, HttpServletResponse response, PersonForm personForm) {
		try {

			Person person = new Person();
			person.setId(Integer.parseInt(personForm.getId()));
			person.setNation(personForm.getNation());
			person.setInformation(personForm.getInformation());

			person.setGender(personForm.getGender());
			person.setHobby(personForm.getHobby());

			person.setName(personForm.getName());
			person.setPassword(personForm.getPassword());

			personService.addPerson(person);

			Person personAdd = personService.findPerson(personForm.getId());
			request.setAttribute("person", personAdd);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "jsp/person.jsp";
	}

数据表new_table要增加两个字段name和password,这里给出要执行的sql语句:

ALTER TABLE `newdb`.`new_table` ADD COLUMN `name` VARCHAR(255) NULL AFTER `hobby`, ADD COLUMN `password` VARCHAR(255) NULL AFTER `name`;


注册页面有了,下面再增加一个jsp页面用于登录功能的实现。


这个WebContent/loginForm.jsp中只用了两个输入框,名称为name和password,和一个提交按钮,点击按钮即是进行登录。

接下来在PersonController.java中,新增一个/login方法用于接收登录页面传过来的参数,并按照用户名name这个参数从数据库中查找对应的记录。把数据库中的记录转为Person类的对象后,使用request.getSession().setAttribute方法把person对象存在session对象中。


	@RequestMapping(value = "/login", method = RequestMethod.POST)
	public Object login(HttpServletRequest request, HttpServletResponse response, PersonForm personForm) {
		try {

			Person person = personService.findPersonByName(personForm.getName());
			request.getSession().setAttribute("person", person);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "jsp/index.jsp";
	}


当然,登录还需要做一些判断逻辑,比如简单地判断登录密码是否与数据库里存的密码一样。实现登录可能还有很多种方式,并且要做的逻辑不止判断密码,还有密码加密解密或刷新缓存等,这里只做简单的实现。


	@RequestMapping(value = "/login", method = RequestMethod.POST)
	public Object login(HttpServletRequest request, HttpServletResponse response, PersonForm personForm) {
		try {

			Person person = personService.findPersonByName(personForm.getName());

			if (person.getPassword().equals(personForm.getPassword())) {
				request.getSession().setAttribute("person", person);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return "jsp/index.jsp";
	}


这里的session对象就是一个有时间规定的会话对象。一般来说session中保存的对象只存活半小时,超过半小时就会自动清空。所以用户登录之后,在半小时之内如果没有任何操作,session会话会自动失效,也就是自动退出登录了。


登录之后,会跳到index.jsp中,这里index.jsp就是登录之后的主页,就像博客登录后看到的第一个页面。这个index.jsp会显示登录的用户信息。

<%=((Person)(request.getSession().getAttribute("person"))).getName() %>主页

<%=request.getSession().getAttribute("person") %>


这里还有一个问题,如何让index.jsp只有登录的人才可以进来。要实现这个功能,只需要加入一句判断就可以了。

<%if(request.getSession().getAttribute("person") !=null) { %>


这样在if语句之间的内容就只能在登录之后才可以看到。



Java视频教程


猜你喜欢

转载自blog.csdn.net/weixin_41239710/article/details/80529411