栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

基于springboot的外星人电脑商城项目(三)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于springboot的外星人电脑商城项目(三)

外星人电脑商城项目(三)
  • 外星人商城项目介绍
    • 项目背景
    • 项目功能
    • 项目技术
    • 项目模块
    • 项目要求
  • 外星人商城项目开发流程
    • 第一节 基础构建
    • 第二节 用户注册
    • 第三节 用户登录
      • 1.登录-持久层
      • 2.登录-业务层
        • 异常处理
        • 业务层接口和实现
      • 3. 登录-控制层
        • 处理异常
        • 登录逻辑
      • 4. 登录-前端页面
      • 5. 登录-用户回话session
      • 6. 登录-拦截器
    • 第四节 用户管理
      • 第一部分 密码修改
      • 第二部分 个人资料
      • 第三部分 上传头像
      • 第四部分 收货地址
    • 第五节 热销商品
    • 第六节 购物车
      • 第一部分 加入购物车
      • 第二部分 显示购物车
      • 第三部分 购物车商品数量
      • 第四部分 勾选数据
    • 第七节 订单
    • 第八节 商品秒杀
  • 外星人商城项目总结

外星人商城项目介绍 项目背景

外星人公司(狗头)委托我开发一个一个专门的外星人商城(模仿京东、天猫),出售外星人电子产品以及周边,实现了以下功能。
本项目已经搭载了服务器,网址给定:
链接: 外星人官方网站.

项目功能
  • 登录
  • 注册
  • 用户管理
  • 热销商品
  • 购物车
  • 订单
  • 商品秒杀
项目技术
  • 项目框架:springboot
  • 数据库框架:mybaits
  • 前端技术:JS、JQuery、Ajax
项目模块

持久层:依据业务要求规划相关的SQL语句,以及进行配置
业务层:核心功能控制、业务操作以及异常处理
控制层:接受请求,处理响应
前端开发:JS、JQuery、Ajax
单元测试:junit

项目要求
  • JDK8
  • maven3.6.1
  • 数据库mysql5.1
  • idea
外星人商城项目开发流程

第一节 基础构建 第二节 用户注册 第三节 用户登录

用户输入信息传到后台数据库进行查询

1.登录-持久层

SQL语句来查询用户,密码的对比在业务层执行

2.登录-业务层 异常处理

1.用户名的密码错我
2.用户名不正确
3.业务层异常都继承已经定义的ServiceException

public class PasswordNotMatchException extends ServiceException {
    public PasswordNotMatchException() {
        super();
    }

    public PasswordNotMatchException(String message) {
        super(message);
    }

    public PasswordNotMatchException(String message, Throwable cause) {
        super(message, cause);
    }

    public PasswordNotMatchException(Throwable cause) {
        super(cause);
    }

    protected PasswordNotMatchException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

业务层接口和实现
public interface IUserService {
    
    User login(String username, String password);

}

这里的返回类型是User,是存储到cookie或session中,必变重复拿取数据。

    @Override
    public User login(String username, String password) {
        // 调用userMapper的findByUsername()方法,根据参数username查询用户数据
        User result = userMapper.findByUsername(username);
        // 判断查询结果是否为null
        if (result == null) {
            // 是:抛出UserNotFoundException异常
            throw new UserNotFoundException("用户数据不存在的错误");
        }

        // 判断查询结果中的isDelete是否为1
        if (result.getIsDelete() == 1) {
            // 是:抛出UserNotFoundException异常
            throw new UserNotFoundException("用户数据不存在的错误");
        }

        // 从查询结果中获取盐值
        String salt = result.getSalt();
        // 调用getMd5Password()方法,将参数password和salt结合起来进行加密
        String md5Password = getMd5Password(password, salt);
        // 判断查询结果中的密码,与以上加密得到的密码是否不一致
        if (!result.getPassword().equals(md5Password)) {
            // 是:抛出PasswordNotMatchException异常
            throw new PasswordNotMatchException("密码验证失败的错误");
        }

        // 创建新的User对象
        User user = new User();
        // 将查询结果中的uid、username、avatar封装到新的user对象中
        user.setUid(result.getUid());
        user.setUsername(result.getUsername());
        user.setAvatar(result.getAvatar());
        // 返回新的user对象
        return user;
    }
3. 登录-控制层 处理异常
   @ExceptionHandler({ServiceException.class, FileUploadException.class})
    public JsonResult handleException(Throwable e) {
        JsonResult result = new JsonResult(e);
        if (e instanceof UsernameDuplicateException) {
            result.setState(4000);
        } else if (e instanceof UserNotFoundException) {
            result.setState(4001);
        } else if (e instanceof PasswordNotMatchException) {
            result.setState(4002);
        } else if (e instanceof AddressCountLimitException) {
            result.setState(4003);
        } else if (e instanceof AddressNotFoundException) {
            result.setState(4004);
        } else if (e instanceof AccessDeniedException) {
            result.setState(4005);
        } else if (e instanceof ProductNotFoundException) {
            result.setState(4006);
        } else if (e instanceof CartNotFoundException) {
            result.setState(4007);
        } else if (e instanceof InsertException) {
            result.setState(5000);
        } else if (e instanceof UpdateException) {
            result.setState(5001);
        } else if (e instanceof DeleteException) {
            result.setState(5002);
        } else if (e instanceof FileEmptyException) {
            result.setState(6000);
        } else if (e instanceof FileSizeException) {
            result.setState(6001);
        } else if (e instanceof FileTypeException) {
            result.setState(6002);
        } else if (e instanceof FileStateException) {
            result.setState(6003);
        } else if (e instanceof FileUploadIOException) {
            result.setState(6004);
        }
        return result;
    }
登录逻辑
    @RequestMapping("login")
    public JsonResult login(String username, String password, HttpSession session) {
        // 调用业务对象的方法执行登录,并获取返回值
        User data = userService.login(username, password);
        //登录成功后,将uid和username存入到HttpSession中
        session.setAttribute("uid", data.getUid());
        session.setAttribute("username", data.getUsername());
        // System.out.println("Session中的uid=" + getUidFromSession(session));
        // System.out.println("Session中的username=" + getUsernameFromSession(session));

        // 将以上返回值和状态码OK封装到响应结果中并返回
        return new JsonResult(OK, data);
    }
4. 登录-前端页面
		
5. 登录-用户回话session

session对象主要存在服务端,可以用来作为保存服务器的临时数据的对象
所保存的数据可以在整个项目中都可以通过访问获取,把session看做一个共享的数据。
首次登录的时候所获取的用户的数据,转移到session对象即可
使用方法getAttribute(“key”),封装在父类中

public class BaseController {

    
    protected final Integer getUidFromSession(HttpSession session) {
        return Integer.valueOf(session.getAttribute("uid").toString());
    }

    
    protected final String getUsernameFromSession(HttpSession session) {
        return session.getAttribute("username").toString();
    }
}

服务器本身自动创建一个session对象,是一个全局seesion,springboot做了一个处理,可以直接使用session对象,直接将httpSession类型的对象组委请求处理方法的参数,会自动将全局的session注入到请求处理方法的session形参上

    @RequestMapping("login")
    public JsonResult login(String username, String password, HttpSession session) {
        // 调用业务对象的方法执行登录,并获取返回值
        User data = userService.login(username, password);
        //登录成功后,将uid和username存入到HttpSession中
        session.setAttribute("uid", data.getUid());
        session.setAttribute("username", data.getUsername());
        // System.out.println("Session中的uid=" + getUidFromSession(session));
        // System.out.println("Session中的username=" + getUsernameFromSession(session));

        // 将以上返回值和状态码OK封装到响应结果中并返回
        return new JsonResult(OK, data);
    }

6. 登录-拦截器
  • 安全验证,可以通过shiro或者springcurity来完成;

  • 拦截器,首先将所有的请求统一拦截到拦截器中,可以定义拦截的规矩,
    如果不满足,统一的处理就是重定向和转发,一般操作为重定向到login页面

  • springMVC提供了一个接口HandlerInterceptor,用于表示一个拦截器

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (request.getSession().getAttribute("uid") == null) {
            response.sendRedirect("/web/login.html");
            return false;
        }
        return true;
    }
}
  • 注册过滤器的技术:借助webmvcconfig接口,将用户定义的拦截器进行注册,才可以保证拦截器能够生效和使用
@Configuration
public class LoginInterceptorConfigurer implements WebMvcConfigurer {
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 创建拦截器对象
        HandlerInterceptor interceptor = new LoginInterceptor();

        // 白名单
        List patterns = new ArrayList();
        patterns.add("/bootstrap3/**");
        patterns.add("/css/**");
        patterns.add("/images/**");
        patterns.add("/js/**");
        patterns.add("/web/register.html");
        patterns.add("/web/login.html");
        patterns.add("/web/index.html");
        patterns.add("/web/product.html");
        patterns.add("/users/reg");
        patterns.add("/users/login");
        patterns.add("/districts/**");
        patterns.add("/products/**");

        // 通过注册工具添加拦截器
        registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns(patterns);
    }
}

第四节 用户管理 第一部分 密码修改 第二部分 个人资料 第三部分 上传头像 第四部分 收货地址 第五节 热销商品 第六节 购物车 第一部分 加入购物车 第二部分 显示购物车 第三部分 购物车商品数量 第四部分 勾选数据 第七节 订单 第八节 商品秒杀 外星人商城项目总结
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/856830.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号