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

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

前台用户登录

在登录页面输入验证码,单击"登录"按钮,页面会携带输入的手机号和验证码向"/user/login"发起请求。

定义UserMapper接口

java 复制代码
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

定义UserService接口

java 复制代码
public interface UserService extends IService<User> {
}

定义UserService实现类

java 复制代码
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

定义UserController类

java 复制代码
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

 	/**
     * 移动端用户登录
     * @param map
     * @param session
     * @return
     */
    @PostMapping("/login")
    public R<User> login(@RequestBody Map<String,String> map,HttpSession session){
        String phone = map.get("phone");
        String code = map.get("code");
        //TODO 验证码验证

        //判断当前手机号对应的用户是否为新用户,如果是新用户就自动完成注册
        QueryWrapper<User> query = new QueryWrapper<>();
        query.eq("phone",phone);
        User user = userService.getOne(query);
        if(user == null){
            user = new User();
            user.setPhone(phone);
            user.setStatus(1);
            userService.save(user);
        }
        session.setAttribute("loginUser",user);
        return R.success(user);
    }

    /**
     * 用户退出
     */
    @PostMapping("/loginout")
    public R<String> logout(HttpServletRequest request){
        //清理Session中保存的当前登录员工的id
        request.getSession().removeAttribute("loginUser");
        return R.success("退出成功");
    }

}

定义用户登录拦截器拦截请求

在config包中创建UserLoginInterceptor 拦截器

java 复制代码
public class UserLoginInterceptor implements HandlerInterceptor {

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

}

配置用户登录拦截器

在WebMvcConfig文件中配置拦截器,设置拦截的路径,这里只简单设置了拦截页面。

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

运行测试

输入手机号及该验证码后,单击"登录"按钮,会跳转到用户端首页。

相关推荐
孙克旭_19 分钟前
Docker 镜像构建|Vue+SpringBoot+Go 多语言项目 Dockerfile 案例
linux·运维·vue.js·spring boot·docker·dockerfile
2602_9599609227 分钟前
谢飞机面试大厂:Spring Boot、JVM、Redis、Kafka、微服务与音视频搜索场景求生实录
java·jvm·spring boot·redis·面试题
宠友信息8 小时前
IM系统开发技术路线分析,即时通讯源码助力快速搭建聊天应用
java·spring boot·redis·websocket·mysql·uni-app·vue
choumou_M9 小时前
SpringBoot_2:MyBatis-Generator插件使用教程
spring boot·tomcat·mybatis
QQ_216962909610 小时前
【项目编号:project95315】SpringBoot公共自习室管理系统:座位预约、房间管理、签到核销、公告规则完整实战
java·spring boot·后端
凤山老林10 小时前
高可用服务容错架构:Spring Boot 集成 Resilience4j 实战指南
spring boot·后端·架构·resilience4j
SQL-First布道者12 小时前
全面解构传统持久层框架,拥抱真正的 SQL-First
java·数据库·spring boot·sql·spring·mybatis·spring jdbc
JacksonMx12 小时前
CompletableFuture 生产环境踩坑详解与解决方案
spring boot·spring·线程池
小蒜学长12 小时前
vue旅游攻略网站(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端·旅游
凤山老林12 小时前
轻量级规则引擎落地:Spring Boot 集成 LiteFlow 实现动态业务编排与热更新
java·spring boot·后端·规则引擎·liteflow