01.SpringBoot项目---mall商城:登录验证,拦截器

SpringBoot项目—mall商城

系统功能结构

在这里插入图片描述

整体思路

  • 使用Spring Boot + MyBatis实现一个电商平台系统
  • 使用Maven构建项目
  • 使用Git做版本控制
  • 前台系统
  • 后台系统

前台系统

注册、登录、商品、购物车、订单

后台系统

登录、统计、商品、订单、分类、个人信息

数据库表结构

在这里插入图片描述

系统架构

在这里插入图片描述

后台系统:登录、注销

效果图:

在这里插入图片描述
在这里插入图片描述

遇到的问题:用户名失去焦点时自动显示对应的头像,应该注意,前端js使用JSON传值:

//获取用户头像
function getUserProfilePicture(username) {
    if (username !== null && username !== "") {
        $.getJSON("/admin/login/profile_picture", {"username": username}, function (data) {
            if (data.success) {
                if (data.srcString !== null) {
                    $("#img_profile_picture").attr("src", "/res/images/item/adminProfilePicture/" + data.srcString);
                    return true;
                }
            }
        });
    }
    $("#img_profile_picture").attr("src", "/res/images/admin/loginPage/default_profile_picture-128x128.png");
}

data.success的值是一个true或者false的类型,如果我们没有传递一个正确的值,那么代码将一直卡在这一行。我们可以定义一个实体类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class SuccessParam {


    private Boolean success;

    private String srcString;

}

在控制器的代码如下:

 @RequestMapping("/login/profile_picture")
    @ResponseBody
    public SuccessParam photo(@RequestParam("username")String name,
                              HttpServletRequest request,
                              HttpSession session){

        SuccessParam successParam = new SuccessParam();
        //获取图片地址
        String picture = service.picture(name);

       session.setAttribute("srcString",picture);
        if(picture != null){

            successParam.setSuccess(true);
            successParam.setSrcString(picture);
            return successParam;
        }else {
            return null;
        }
    }

此时,如果用户名是正确的,获取到了图片地址,我们就能给success传递true,前端就能正确响应,展示一下SQL:

    @Select("SELECT adminProfilePictureSrc FROM admin WHERE adminName = #{adminName}")
    public String picture(String adminName);

根据用户名查询图片地址

拦截器

拦截器用于限制用户权限。否则很有可能出现用户在没有登录的情况下修改地址栏的地址直接进入主页的情况。

编写步骤:

  1. 创建拦截器:

    前提条件:继承HandleInterceptor接口

    public class LoginInterceptor implements HandlerInterceptor {}
    

    实现拦截接口:

    preHandle:

    ​ 作用:前置-请求进入controller之前

    ​ 返回值:Boolean true:请求继续执行,false:请求结束

    ​ 写法:

    ​ 判断session中是否存在登陆对象

    ​ 根据判断结果进行处理

     @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
            System.out.println("进入拦截器的路径:"+request.getRequestURI());
            //判断登录-session里面是否存在登录对象
            HttpSession session = request.getSession();
            Admin admin = (Admin) session.getAttribute("admin");
            if(admin != null){
                //存在:直接放行
                return true;
            }else{
                //不存在:跳转到登录状态已失效界面 admin/include/loginMessage
                response.sendRedirect("/admin/loginMessage.html");
                return false;
            }
        }
    
  2. 配置拦截器:

    spring:dispatcher-servlet.xml

    springboot:需要使用Java配置类代替原spring的配置文件

    ​ 创建一个配置类

    @Configuration 指定当前类是配置类的注解

    ​ 继承WebMvcConfiguration

    配置拦截器

    ​ 重写addInterceptors接口

    ​ 添加拦截器

    ​ 指定需要拦截的路径

    ​ 指定不需要拦截的路径

    @Configuration
    public class MvcConfig implements WebMvcConfigurer {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            //添加拦截器
            //拦截的内容
            //不拦截的内容
            registry.addInterceptor(new LoginInterceptor())
                    .addPathPatterns("/**")
                    .excludePathPatterns("/admin/login.html",
                                         "/admin/login1/",
                                         "/res/**",
                                         "/admin/loginMessage.html",
                                         "/admin/login/profile_picture",
                                         "/fore/login.html");
        }
    }
    
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当前课程中商城项目的实战源码是我发布在 GitHub 上的开源项目 newbee-mall (新蜂商城),目前已有 9900 多个 Star,本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 商城项目功能的讲解,让大家实际操作并实践上手一个大型的线上商城项目,并学习到一定的开发经验以及其中的开发技巧。商城项目所涉及的功能结构图整理如下: 作者寄语本课程录制于2019年,距今已有一段时间。期间,Spring Boot技术栈也有一些版本升级,比如Spring Boot 2.7.x发版、Spring Boot 3.x版本正式版本。对于这些情况,笔者会在本课程实战项目的开源仓库中创建不同的代码分支,保持实战项目的源码更新,保证读者朋友们不会学习过气的知识点。新蜂商城的优化和迭代工作不会停止,不仅仅是功能的优化,在技术栈上也会不断的增加,截止2023年,新蜂商城已经发布了 7 个重要的版本,版本记录及开发计划如下图所示。 课程特色 对新手开发者十分友好,无需复杂的操作步骤,仅需 2 秒就可以启动这个完整的商城项目最终的实战项目是一个企业级别的 Spring Boot 大型项目,对于各个阶段的 Java 开发者都是极佳的选择实践项目页面美观且实用,交互效果完美教程详细开发教程详细完整、文档资源齐全代码+讲解+演示网站全方位保证,向 Hello World 教程说拜拜技术栈新颖且知识点丰富,学习后可以提升大家对于知识的理解和掌握,可以进一步提升你的市场竞争力 课程预览 以下为商城项目的页面和功能展示,分别为:商城首页 1商城首页 2购物车订单结算订单列表支付页面后台管理系统登录页商品管理商品编辑

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值