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

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

相关推荐
小杜-coding2 小时前
黑马点评day04(分布式锁-setnx)
java·spring boot·redis·分布式·spring·java-ee·mybatis
caihuayuan53 小时前
升级element-ui步骤
java·大数据·spring boot·后端·课程设计
揣晓丹5 小时前
JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码
java·vue.js·spring boot·后端·开源
奔驰的小野码5 小时前
SpringAI实现AI应用-自定义顾问(Advisor)
java·人工智能·spring boot·spring
我尽力学5 小时前
Spring、SpringMVC、SpringBoot、SpringCloud 联系与区别
spring boot·spring·spring cloud
caihuayuan57 小时前
Vue生命周期&脚手架工程&Element-UI
java·大数据·spring boot·后端·课程设计
MaCa .BaKa8 小时前
37-智慧医疗服务平台(在线接诊/问诊)
java·vue.js·spring boot·tomcat·vue·maven
tanxiaomi9 小时前
Java中对象集合转换的优雅实现【实体属性范围缩小为vo】:ListUtil.convert方法详解
java·spring boot·mybatis
小刘|9 小时前
Spring,SpringMVC,SpringBoot,SpringCloud的区别
spring boot·spring·spring cloud
明月与玄武10 小时前
Spring Boot中的拦截器!
java·spring boot·后端