登录和注册逻辑

概述

现在前后端不分离的项目一般后台是用springsecurity来做权限认证,前台就是用户登录注册配合着拦截器,那么这块逻辑应该怎样写那?数据库怎么设计那?要注意那些问题那?

技术栈

数据库用的是mysql,数据库框架用的mybatisplus,项目架构就是普通的springboot项目,前后端不分离

数据库设计

数据库

用户这里的信息我设计的比较复杂,也可以写的更简单一些

java实体类

/**
 * 用户
 */
@Data
public class User {
    @TableId
    private Integer userId;
    private String username;//用户名
    private String password;//密码
    private String QQNumber;//QQ号
    private String phone;//手机号
    private String email;//邮箱
    private String sex;//性别
    private String birthday;//生日
    private String age;//年龄
    private String job;//职业
    private String addressCountry;//国家
    private String addressProvince;//省份
    private String addressCity;//城市
    private String myDesc;//自我介绍
    private boolean active; //是否激活

}

逻辑实现

mapper接口

public interface UserMapper extends BaseMapper<User> {
}

 service服务层

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;


    public UserResult login(String username, String password) {
        User user = null;
        //通过用户名查询用户
        if (user == null) {
            QueryWrapper<User> queryWrapper1 = new QueryWrapper<>();
            queryWrapper1.eq("username", username);
            user = userMapper.selectOne(queryWrapper1);
        }
        //通过用户QQ号
        if (user == null) {
            QueryWrapper<User> queryWrapper2 = new QueryWrapper<>();
            queryWrapper2.eq("QQNumber", username);
            user = userMapper.selectOne(queryWrapper2);
        }
        //通过用户手机号
        if (user == null) {
            QueryWrapper<User> queryWrapper3 = new QueryWrapper<>();
            queryWrapper3.eq("phone", username);
            user = userMapper.selectOne(queryWrapper3);
        }
        //通过用户邮箱
        if (user == null) {
            QueryWrapper<User> queryWrapper4 = new QueryWrapper<>();
            queryWrapper4.eq("email", username);
            user = userMapper.selectOne(queryWrapper4);
        }
        //判断是否有该用户
        if (user == null) {
            return new UserResult(false, "用户名不存在");
        }
        //判断用户是否激活
        if(!user.isActive()){
            return new UserResult(false, "用户未激活");
        }
        //验证密码
        if (!Md5Util.verify(password,user.getPassword())) {

            return new UserResult(false, "用户密码错误");
        }
        return new UserResult(true, "登录成功", user);
    }
    //测试开发阶段,暂时不用邮件验证激活用户,默认激活
    public UserResult register(User user){
        //用户名是否重复
        QueryWrapper<User> queryWrapper1 = new QueryWrapper();
        queryWrapper1.eq("username",user.getUsername());
        List<User> users1 = userMapper.selectList(queryWrapper1);
        if(users1.size()>0){
            return new UserResult(false,"用户名已存在");
        }
        //QQ号是否重复
        QueryWrapper<User> queryWrapper2 = new QueryWrapper();
        queryWrapper2.eq("QQNumber",user.getQQNumber());
        List<User> users2 = userMapper.selectList(queryWrapper2);
        if(users2.size()>0){
            return new UserResult(false,"QQ号已存在");
        }
        //手机号是否重复
        QueryWrapper<User> queryWrapper3 = new QueryWrapper();
        queryWrapper3.eq("phone",user.getPhone());
        List<User> users3 = userMapper.selectList(queryWrapper3);
        if(users3.size()>0){
            return new UserResult(false,"手机号已存在");
        }
        //邮箱是否重复
        QueryWrapper<User> queryWrapper4 = new QueryWrapper();
        queryWrapper4.eq("email",user.getEmail());
        List<User> users4 = userMapper.selectList(queryWrapper4);
        if(users4.size()>0){
            return new UserResult(false,"邮箱已存在");
        }
        //加密密码,保存用户
        String password=user.getPassword();
        password= Md5Util.encode(password);
        user.setPassword(password);
        //测试开发阶段,暂时不用邮件验证激活用户
        user.setActive(true);
        //添加该用户
        userMapper.insert(user);
        return new UserResult(true,"登录成功");
    }

    public void add(User user) {
        //加密密码,保存用户
        String password=user.getPassword();
        password= Md5Util.encode(password);
        user.setPassword(password);
        //测试开发阶段,暂时不用邮件验证激活用户
        user.setActive(true);
        userMapper.insert(user);
    }

    public void update(User user) {
        //查询用户密码,如果密码和以前一样,则不做处理,若不同则加密更新
        User user1 = userMapper.selectById(user.getUserId());
        if(!user1.getPassword().equals(user.getPassword())){
            //加密密码,保存用户
            String password=user.getPassword();
            password= Md5Util.encode(password);
            user.setPassword(password);
        }
        user.setActive(true);
        userMapper.updateById(user);
    }

    public void delete(Integer userId) {
        userMapper.deleteById(userId);
    }

    public User findById(Integer userId) {
        return userMapper.selectById(userId);
    }

    public List<User> findAll() {
        return userMapper.selectList(null);
    }

    public Page<User> search(int page, int size) {
        return userMapper.selectPage(new Page<>(page, size), null);
    }

    public Integer findNumber() {
        return userMapper.selectCount(null);
    }
    public void updateStatus(Integer id) {
        User user = userMapper.selectById(id);
        user.setActive(!user.isActive());
        userMapper.updateById(user);
    }

}

控制层

@Controller
@RequestMapping("/front/user")
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping("/register")
    public ModelAndView register(User user,HttpSession session){
        ModelAndView modelAndView=new ModelAndView();
        UserResult register = userService.register(user);
        if(!register.isFlag()){
            modelAndView.addObject("message2",register.getMessage());
            modelAndView.setViewName("/frontPage/user_login");
            return modelAndView;
        }else{
            modelAndView.setViewName("/frontPage/user_login");
        }
        return modelAndView;
    }

    /**
     * 登录
     * @param username 用户名
     * @param password 密码
     * @param session
     * @return
     */
    @RequestMapping("/login")
    public ModelAndView login(String username, String password, HttpSession session){
        ModelAndView modelAndView=new ModelAndView();
        UserResult userResult = userService.login(username, password);
        //登录失败
        if(!userResult.isFlag()){
            modelAndView.addObject("message1",userResult.getMessage());
            modelAndView.setViewName("/frontPage/user_login");
            return modelAndView;
        }else {
            session.setAttribute("user",userResult.getData());
            modelAndView.setViewName("redirect:/front/index");
        }
        return modelAndView;
    }

    /**
     * 提出登录
     * @param session
     * @return
     */
    @RequestMapping("/logout")
    public String logout(HttpSession session) {
        session.removeAttribute("user");
        return "redirect:/front/index";
    }
    @RequestMapping("/info")
    public ModelAndView info(HttpSession session){
        ModelAndView modelAndView=new ModelAndView();
        User user = (User) session.getAttribute("user");
        modelAndView.addObject("user",user);
        modelAndView.setViewName("/frontPage/user_info");
        return modelAndView;
    }
    @RequestMapping("/update")
    public String update(User user,HttpSession session){
        userService.update(user);
        session.removeAttribute("user");
        return "redirect:/front/index";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月木@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值