Spring + Spring MVC + Mybatis 云笔记项目(三)登录注册功能
开发工具:eclipse + navicat项目源码:CSDN下载地址Github:Github源码地址一、在(二)中完成好项目的配置,以及数据库的连接之后,创建user 的mybatis mapper,用来在我们向数据库保存数据或者查询数据时 “注入”到相关的 dao里面,UserMapper.xml<?xml version="1.0" encoding="...
开发工具:eclipse + navicat
项目源码:CSDN下载地址
Github:Github源码地址
一、在(二)中完成好项目的配置,以及数据库的连接之后,创建user 的mybatis mapper,用来在我们向数据库保存数据或者查询数据时 “注入”到相关的 dao里面,
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.sjh.cloud_note.dao.UserDao">
<select id="findByName" parameterType="string" resultType="com.sjh.cloud_note.entity.User">
select * from cn_user where cn_user_name=#{name}
</select>
<insert id="save" parameterType="com.sjh.cloud_note.entity.User">
insert into
cn_user(cn_user_id,cn_user_name,cn_user_password,cn_user_nick,cn_user_token)
values(#{cn_user_id},#{cn_user_name},#{cn_user_password},#{cn_user_nick},#{cn_user_token})
</insert>
<update id="change" parameterType="com.sjh.cloud_note.entity.User">
update cn_user set cn_user_password=#{cn_user_password} where cn_user_id=#{cn_user_id}
</update>
</mapper>
包含了三部分:
1、findByName用来用户登录时根据用户输入的登录名进行验证数据库中是否存在该用户,以及密码是否一致,以及注册的时候用户名是否已经被注册过。
2、save 是用来用户在注册时向数据库中保存用户的账户数据。
3、change 是用来更改用户的登录密码。
二、创建用户 User 实体类(编号、姓名、密码、令牌、昵称、用户所属笔记本)
package com.sjh.cloud_note.entity;
import java.io.Serializable;
import java.util.List;
public class User implements Serializable {
private String cn_user_id;
private String cn_user_name;
private String cn_user_password;
private String cn_user_token;
private String cn_user_nick;
private List<Book> books;
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
public String getCn_user_id() {
return cn_user_id;
}
public void setCn_user_id(String cn_user_id) {
this.cn_user_id = cn_user_id;
}
public String getCn_user_name() {
return cn_user_name;
}
public void setCn_user_name(String cn_user_name) {
this.cn_user_name = cn_user_name;
}
public String getCn_user_password() {
return cn_user_password;
}
public void setCn_user_password(String cn_user_password) {
this.cn_user_password = cn_user_password;
}
public String getCn_user_token() {
return cn_user_token;
}
public void setCn_user_token(String cn_user_token) {
this.cn_user_token = cn_user_token;
}
public String getCn_user_nick() {
return cn_user_nick;
}
public void setCn_user_nick(String cn_user_nick) {
this.cn_user_nick = cn_user_nick;
}
@Override
public String toString() {
return "User [cn_user_id=" + cn_user_id + ", cn_user_name=" + cn_user_name + ", cn_user_password="
+ cn_user_password + ", cn_user_token=" + cn_user_token + ", cn_user_nick=" + cn_user_nick + ", books="
+ books + "]";
}
}
三、创建接口 UserDao.java 用来和数据库进行数据交互,方法名需要和UserMapper中对应sql 的Id保持一致,否则在引用的时候会报错。
package com.sjh.cloud_note.dao;
import com.sjh.cloud_note.entity.User;
public interface UserDao {
//根据用户名查找用户
public User findByName(String name);
//新增用户
public void save(User user);
//修改密码
public void change(User user);
}
四、创建接口 UserService.java 并实现它 UserServiceImpl.java
UserServie.java 总共包含三部分:验证用户登录、添加用户、修改密码
package com.sjh.cloud_note.service;
import com.sjh.cloud_note.entity.User;
import com.sjh.cloud_note.util.NoteResult;
public interface UserService {
//验证用户的登录
public NoteResult<User> checkLogin(String name,String password);
//添加用户
public NoteResult<User> addUser(String name,String password,String nick);
//修改密码
public NoteResult<Object> changeUser(String userName,String last_password,String final_password);
}
UserServiceImpl.java 添加 @Service 注解,是为了在扫描的是否自动将该Service注册到Spring容器,相当于在 spring_mvc.xml中自动生成了一个 UserServiceImpl bean。@Transaction注解,开始事务。 @Resource 注解,用来装配相关Bean(UserDao Bean 在组件Spring_mybatis.xml扫描的时候已经自动生成并注册到Spring 容器),狭义上可以理解为对 userDao执行了 setter 方法,即进行了 “实例化”(依赖注入)。
package com.sjh.cloud_note.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.sjh.cloud_note.dao.UserDao;
import com.sjh.cloud_note.entity.User;
import com.sjh.cloud_note.util.NoteResult;
import com.sjh.cloud_note.util.NoteUtil;
@Service("userService") //扫描spring容器
@Transactional
public class UserServiceImpl implements UserService{
@Resource
private UserDao userDao;
public NoteResult<User> checkLogin(String name, String password) {
//接受操做之后的结果
NoteResult<User> result=new NoteResult<User>();
//调用UserMapper中的查询,并且以User的形式返回查询结果。
User user = userDao.findByName(name);
//判断该用户是否存在
if(user==null) {
result.setStatus(1);
result.setMsg("未找到该用户");
return result;
}
//密码加密,并且比较密码是否一致
String md5Password=NoteUtil.md5(password);//MD5加密
if(!user.getCn_user_password().equals(md5Password)) {
result.setStatus(2);
result.setMsg("密码错误");
return result;
}
//返回验证的结果
result.setStatus(0);
result.setMsg("登陆成功");
result.setData(user);
return result;
}
//注册用户
public NoteResult<User> addUser(String name, String password, String nick) {
//接受操作之后的结果
NoteResult<User> result = new NoteResult<User>();
//查询数据库
User hasUser = userDao.findByName(name);
//判断该用户名称是否已经存在
if(hasUser!=null) {
result.setStatus(1);
result.setMsg("该用户已经存在,请更换注册名称");
return result;
}
User user = new User();
user.setCn_user_name(name);
//对密码进行加密
String md5Password = NoteUtil.md5(password);
user.setCn_user_password(md5Password);
user.setCn_user_nick(nick);
//生成随机的id
String id = NoteUtil.createId();
user.setCn_user_id(id);
//保存用户
userDao.save(user);
//返回操作之后的结果
result.setStatus(0);
result.setMsg("用户注册成功");
return result;
}
//更改密码
public NoteResult<Object> changeUser(String userName, String last_password, String final_password) {
NoteResult<Object> result=new NoteResult<Object>();
//按照用户名进行查询
User user = userDao.findByName(userName);
//获取用户密码
String user_password = user.getCn_user_password();
//密码加密
last_password=NoteUtil.md5(last_password);
final_password=NoteUtil.md5(final_password);
System.out.println(user_password);
System.out.println(last_password);
System.out.println(final_password);
//判断密码是否一致
if(!user_password.equals(last_password)) {
result.setStatus(1);
result.setMsg("密码不一致,请重新填写");
return result;
}else if(user_password.equals(final_password)) {
result.setStatus(2);
result.setMsg("新密码不能和旧密码一致,请重新填写");
return result;
}else{
//返回操作结果
user.setCn_user_password(final_password);
userDao.change(user);
result.setStatus(0);
result.setMsg("密码修改成功");
return result;
}
}
}
注册流程:用户提交数据 -> DispatcherServlet 对请求进行拦截过滤 -> 根据URL分配 Controller -> 执行 controller.execute() 方法 -> 调用 userService.addUser(),进行保存数据 -> 返回注册结果 - ajax回调 -> status = 0 注册成功 跳转到登录界面,status = 1 注册失败 提示错误信息,重新注册。
提交注册数据 registerUser
function registerUser(){
//获取参数
var name=$("#regist_username").val().trim();//获取账户名
var nick=$("#nickname").val().trim();//获取昵称
var password=$("#regist_password").val().trim();//获取密码
var final_password=$("#final_password").val().trim();//获取确认密码
//检查数据格式
var ok=true;//表示参数状态
//检查用户
if(name==""){
$("#warning_1 span").html("用户名不能为空");
$("#warning_1").show();//显示出来
ok=false;
}
//检测密码
//1.非空 2.不能小于6位
if(password==""){
$("#warning_2 span").html("密码不能为空");
$("#warning_2").show();//显示出来
ok=false;
}else if(password.length>0&&password.length<6){
$("#warning_2 span").html("密码不能小于小于6位");
$("#warning_2").show();//显示出来
ok=false;
}
//检测确认密码
//1.非空 2.是否与密码一致
if(final_password==""){
$("#warning_3 span").html("确认密码不能为空");
$("#warning_3").show();//显示出来
ok=false;
}else if(final_password!=password){
$("#warning_3 span").html("输入密码不一致");
$("#warning_3").show();//显示出来
ok=false;
}
if(ok){//数据校验通过
$.ajax({
url:base_path+"/user/add.do",
type:"post",
data:{"name":name,"nick":nick,"password":password},
dataType:"json",
success:function(result){
if(result.status==0){//成功
alert(result.msg);//提示成功
$("#back").click();//转向登录界面
}else if(result.status==1){//用户名被占
$("#warning_1 span").html(result.msg);
$("#warning_1").show();
}
},
error:function(){
alert("注册异常");
}
});
}
};
分配相关Controller UserRegisterController,@Controller 注解 为Controller,@RequestMapping 处理请求地址的注解,用于类上,则表明该类的所有方法都已改地址作为父路径,用于方法上,则为子路径,当 ajax 发送 “/user/add.do”的请求后,会将该请求分配给UserRegisterController 类下面带有add.do的方法。 @ResponseBody 注解 将数据以JSON 形式返回,AJAX 在前端接受返回的数据
package com.sjh.cloud_note.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.sjh.cloud_note.entity.User;
import com.sjh.cloud_note.service.UserService;
import com.sjh.cloud_note.util.NoteResult;
@Controller
@RequestMapping("/user")
public class UserRegisterController {
@Resource
private UserService userService;
@RequestMapping("add.do")
@ResponseBody
public NoteResult<User> execute (String name,String nick,String password){
NoteResult<User> result = userService.addUser(name, password, nick);
return result;
}
}
登录流程:用户提交登录数据 -> DispatcherServlet 对请求进行拦截过滤 -> 根据URL分配 Controller -> 执行 controller.execute() 方法 -> 调用 userService.checkLogin(),进行验证-> 返回登录结果 - ajax回调 -> status = 0 登录成功 跳转到主界面,status = 1 登录失败,未找到该用户,status = 2 ,登陆失败,密码错误,并提示错误信息,重新登录。
提交登录数据
//登录处理
function checkLogin(){
//获取参数
var name=$("#count").val().trim();//获取输入的账号
var password=$("#password").val().trim();//获取输入的密码
//清空以前提示信息
$("#count_span").html("");
$("#password_span").html("");
//格式检测
var ok=true;
if(name==""){
$("#count_span").html("用户不能为空");
ok=false;
}
if(password==""){
$("#password_span").html("密码不能为空");
ok=false;
}
//发送请求
if(ok){ //检测格式通过
//发送ajax请求
$.ajax({
url:base_path+"/user/login.do",
type:"post",
data:{"name":name,"password":password},
dataType:"json",
success:function(result){
//result是服务器返回的JSON结果
if (result.status==0) { //登录成功
//将用户信息保存到Cookie
var userName=result.data.cn_user_name;
var userId=result.data.cn_user_id;
addCookie("userId",userId,2);
addCookie("userName",userName,2);
window.location.href="edit.html";
}else if(result.status==1){//用户名错误
$("#count_span").html(result.msg);
}else if(result.status==2){//密码错误
$("#password_span").html(result.msg);
}
},
error:function(){
alert("登录失败!");
}
});
}
};
分配相关 Controller UserLoginController
package com.sjh.cloud_note.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.sjh.cloud_note.entity.User;
import com.sjh.cloud_note.service.UserService;
import com.sjh.cloud_note.util.NoteResult;
@Controller
@RequestMapping("/user")
public class UserLoginController {
@Resource
private UserService userService;
@RequestMapping("/login.do")
@ResponseBody
public NoteResult<User> execute(String name,String password){
System.out.println(name+","+password);
NoteResult<User> result = userService.checkLogin(name, password);
return result;
}
}
至此整个云笔记项目的登录注册功能已经完成。
更多推荐
所有评论(0)