基于 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");
}
运行测试
输入手机号及该验证码后,单击"登录"按钮,会跳转到用户端首页。