基于 Spring Boot 瑞吉外卖系统开发(二)

基于 Spring Boot 瑞吉外卖系统开发(二)

员工登录功能实现

员工登录页面login.html存放在/resources/backend/page/login目录下。

启动项目,在浏览器中通过地址"http://localhost:8080/backend/page/login/login.html"访问员工登录页面。

按下快捷键F12打开浏览器调试工具后,单击"登录"按钮,浏览器抓取到登录的请求信息。

定义Mapper接口

自定义的Mapper接口可以继承BaseMapper获得通用的增删改查功能。

在项目的src/main/java目录下创建com.itheima.reggie.mapper包,在该包下创建员工Mapper接口EmployeeMapper。

java 复制代码
@Mapper
public interface EmployeeMapper extends BaseMapper<Employee> {

}

定义Service接口

java 复制代码
public interface EmployeeService extends IService<Employee> {
}

定义Service实现类

java 复制代码
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {

}

定义Controller类

java 复制代码
@RestController
@RequestMapping("/employee")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @PostMapping("/login")
    public R<Employee> login(@RequestBody Employee employee, HttpServletRequest request){
        //1.将页面提交的密码password进行MD5加密处理
        String password = employee.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());
        //2.根据页面提交的用户名username查询数据库
        QueryWrapper<Employee> query = new QueryWrapper<>();
        query.eq("username", employee.getUsername());
        Employee one = employeeService.getOne(query);
        //3.如果没有查询到员工信息或者密码不正确,则返回登录失败结果
        if(one==null || !one.getPassword().equals(password)){
            return R.error("用户名或密码错误");
        }
        //4.查看员工状态,如果为已禁用状态,则返回员工已禁用结果
        if(one.getStatus() == 0){
            return R.error("账号已禁用");
        }
        //5.登录成功,将员工Id存入Session并返回员工信息
        request.getSession().setAttribute("loginEmployee", one);
        return R.success(one);
    }
}

登录功能测试

启动项目,在浏览器中通过地址"http://localhost:8080/backend/page/login/login.html"访问员工登录页面,在登录页面使用错误的账号或密码进行登录。

使用正确的账号和密码进行登录。

登录拦截功能

管理端的员工登录已经实现完成,但是此时员工如果不登录,也可以直接访问管理端的其他页面。

对此,可以使用拦截器对请求进行拦截判断,判断员工是否已经完成登录,如果没有登录则跳转到登录页面。
com/itheima/reggie/config/LoginInterceptor.java

java 复制代码
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object loginEmployee = request.getSession().getAttribute("loginEmployee");
        if  (loginEmployee == null) {
            //未登录,返回登录页
            response.sendRedirect("/backend/page/login/login.html");
            return  false ; //不放行
        }
        return  true ; //放行
    }

}

com/itheima/reggie/config/WebMvcConfig.java中注册拦截器,并设置拦截的路径。

java 复制代码
    /**
     * 员工登录拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/backend/page/**","/backend/index.html")
                .excludePathPatterns("/backend/page/login/login.html");
    }

这里拦截器只设置了拦截前端的页面,真实开发后端接口也需要拦截。

至此,员工没有成功登录的话,访问其他路径都会自动跳转到登录页面。

员工退出登录

员工登录成功后,会将对应的员工信息存入到Session中,以记录员工的登录状态。相反,如果想要实现员工退出,则可以在收到退出请求后,将当前员工存放在Session中的信息清除即可。
/controller/EmployeeController.java 添加logout方法。

java 复制代码
    @PostMapping("/logout")
    public R<String> logout(HttpServletRequest request){
        request.getSession().removeAttribute("loginEmployee");
        return R.success("退出成功");
    }

至此,点击后台首页右上角退出按钮进行退出。

相关推荐
wxid:yiwoxuan19 分钟前
购物商城网站 Java+Vue.js+SpringBoot,包括商家管理、商品分类管理、商品管理、在线客服管理、购物订单模块
java·vue.js·spring boot·课程设计
Java知识库1 小时前
「深度拆解」Spring Boot如何用DeepSeek重构MCP通信层?从线程模型到分布式推理的架构进化
java·开发语言·spring boot·程序员·编程
小白杨树树1 小时前
【SSM】SpringBoot学习笔记1:SpringBoot快速入门
spring boot·笔记·学习
Java知识库1 小时前
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
spring boot·知识图谱·neo4j
风象南2 小时前
SpringBoot实现简易直播
java·spring boot·后端
路修2 小时前
Spring Boot + Elasticsearch + HBase 构建海量数据搜索系统
spring boot·elasticsearch·hbase
喜欢踢足球的老罗3 小时前
使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 数据库
数据库·spring boot·mysql
米粉03053 小时前
SpringBoot核心注解详解及3.0与2.0版本深度对比
java·spring boot·后端
一只帆記4 小时前
SpringBoot EhCache 缓存
spring boot·后端·缓存
yuren_xia7 小时前
Spring Boot中保存前端上传的图片
前端·spring boot·后端