基于 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("退出成功");
    }

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

相关推荐
Flittly3 分钟前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
Flynt19 小时前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
掉鱼的猫2 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·spring boot
人活一口气3 天前
Spring Boot与AIGC的完美结合:从零搭建智能内容生成平台
java·spring boot·aigc
java小白小6 天前
SpringBoot(01): 初识SpringBoot,从Spring的痛点说起
spring boot
用户3169353811836 天前
如何从零编写一个 Spring Boot Starter
spring boot
程序员晓琪7 天前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly7 天前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
用户3521802454758 天前
🎆从 Prompt 到 Skill:让 Spring AI Agent 学会"装新技能"
人工智能·spring boot·ai编程
用户35218024547511 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程