瑞吉外卖 登录功能,退出功能实现

1.登录功能实现逻辑:

 先查询数据空中是否有这个用户名,没有的话直接返回登录失败

有这个用户名,再检查密码对不对,密码不对直接返回登录失败

employee表有一个字段是status,这个字段表示这个用户是不是被封号了,被封号了也要返回一个结果给浏览器

 实现:

 @PostMapping("/login")
    public R<Employee> login(HttpServletRequest request,@RequestBody Employee employee)
    {
        //拿到用户输入的密码employee.password
        String password=employee.getPassword();
        
        //对密码进行MD5加密处理
        password=DigestUtils.md5DigestAsHex(password.getBytes());
        
        //拿到用户输入的户名employee.username,查询数据库中是否有这个用户名
        LambdaQueryWrapper<Employee> queryWrapper=new LambdaQueryWrapper<Employee>();
        
        queryWrapper.eq(Employee::getUsername,employee.getUsername());
        
        Employee emp=employeeService.getOne(queryWrapper);//emp就是从数据库中查出来的对象
        
        //数据库中是否有这个用户
        if(emp==null)
        {
            return R.error("登陆失败");
        }
        //密码比对不一致
        if(emp.getPassword().equals(password)==false)
        {
            return  R.error("登陆失败");
        }
        //查看员工状态,0表示被封号
        if(emp.getStatus()==0)
        {
            return  R.error("账号被封");
        }
        
        //登录成功,将员工id存入到Session里,并且返回登录成功后的结果
        request.getSession().setAttribute("employee",emp.getId());
        return R.success(emp);
    }

但是这样还存在一个问题:用户如果不登陆,直接输入网址,也可以访问到一些本来需要登录才能访问到的页面,我们想要实现的是:有些页面不要登录就能访问,有些页面需要登才能访问,没有登陆输入网址想要访问就跳转到登录页面

如何实现:使用过滤器或者拦截器,在过滤器或者拦截器中判断用户是否已经完成登录,如果没有登录就跳转到登录页面

              

 

//检查用户是否已经登录

//第一个参数表示给过滤器起名字,第二个参数表示对哪些url请求进行拦截(这里是所有url进行拦截)
@WebFilter(filterName="loginCheckFilter",urlPatterns = "/*")
@Slf4j
public class LoginCheckFilter implements Filter
{
    //路径匹配器
    public static final AntPathMatcher PATH_MATCHER=new AntPathMatcher();

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
    {
        HttpServletResponse response=(HttpServletResponse) servletResponse;
        HttpServletRequest request=(HttpServletRequest) servletRequest;

        //拿到本次请求的URI
        String requestURI=request.getRequestURI();

        log.info("拦截到请求:{}",requestURI);

        //以下url直接放行
        String[] urls=new String[]{"/employee/login","/employee/logout","/backend/**","/front/**"};

        //判断访问这个url是否需要判断登录,不用检查就直接放行
        boolean check=check(urls,requestURI);

        if(check==true)
        {
            log.info("本次请求{}不需要处理",requestURI);
            filterChain.doFilter(request,response);//放行
            return;
        }

        //看看用户是否已经登录
        if(request.getSession().getAttribute("employee")!=null)//已经登陆了,就直接放行
        {
            log.info("用户已登录,用户id为:{}",request.getSession().getAttribute("employee"));
            filterChain.doFilter(request,response);//放行
            return;
        }

        //如果没有登录
        log.info("用户未登录");
        response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));


        return;
    }

    //检查本次请求是否需要放行
    public boolean check(String[] urls,String requestURI)
    {
        for(String url:urls)
        {
            boolean match=PATH_MATCHER.match(url,requestURI);
            if(match==true)
            {
                return  true;
            }
        }
        return false;
    }
}

2.退出功能实现:

点击右上角的退出按钮,发送请求,请求地址是/employee/logout 请求方式位POST

就可以退出登录,跳转到登陆页面

  @RequestMapping("/logout")
    public R<String> logout(HttpServletRequest request)
    {
        //清理Session中保存的当前登录员工的id
        request.getSession().removeAttribute("employee");

        return R.success("退出成功");

    }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是瑞吉外卖功能项目分析: 1. 用户端功能 - 用户注册:用户可以通过手机号、邮箱等方式进行注册。 - 用户登录:用户可以通过已注册的账号进行登录。 - 菜品搜索:用户可以通过菜品名称、分类、口味等关键词进行搜索。 - 菜品浏览:用户可以浏览所有菜品,并查看菜品详情、价格、评价等信息。 - 菜品点餐:用户可以将心仪的菜品添加到购物车中,并选择数量、口味等选项。 - 购物车管理:用户可以对购物车中的菜品进行查看、修改、删除等操作。 - 订单管理:用户可以查看自己的历史订单记录,并进行订单评价、投诉等操作。 - 在线支付:用户可以通过第三方支付平台进行在线支付。 - 个性化推荐:系统可以根据用户的历史订单、评价等信息,为用户推荐符合其口味的菜品。 2. 商家端功能 - 商家入驻:商家可以通过填写相关信息进行入驻申请。 - 菜品管理:商家可以添加、修改、删除菜品,并设置菜品价格、口味等选项。 - 订单管理:商家可以查看所有订单记录,并进行订单状态的修改、配送等操作。 - 数据统计:商家可以查看销售额、订单量等数据统计信息。 - 配送管理:商家可以对配送员进行管理,分配订单等操作。 3. 管理员端功能 - 用户管理:管理员可以对用户进行管理,并进行禁言、封号等操作。 - 商家管理:管理员可以对商家进行审核、管理,并进行下架、封禁等操作。 - 订单管理:管理员可以查看所有订单记录,并进行订单状态的修改、配送等操作。 - 数据统计:管理员可以查看销售额、订单量等数据统计信息。 以上是瑞吉外卖功能项目分析,希望能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值