基于SpringBoot的online_music_player_(登入注册模块_2)

89 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情 

封装响应

刚刚我们的登入逻辑是没有了问题,但是我们的服务器并没有给客户端返回响应,所以我们需要根据约定的响应,登入请求后分装并返回!

创建一个tools包统一保存一些通用的代码,创建响应类ResponseBodyMessage这里响应信息我们可以通过泛型,就可以变成通用的响应!

package com.example.onlinemusic.tools;
import lombok.Data;
/**
 * Created with IntelliJ IDEA.
 * Description:统一(泛型)的响应体
 * User: hold on
 * Date: 2022-07-26
 * Time: 21:32
 */
@Data
public class ResponseBodyMessage <T>{
    private int status;//状态码 0 表示成功,-1表示失败!
    private String message;//响应信息描述
    private T data; //返回的数据,这里采用泛型因为响应的数据的种类很多
    public ResponseBodyMessage(int status, String message, T data) {
        this.status = status;
        this.message = message;
        this.data = data;
    }
}
​

验证

image-20220726215005432

Session创建

我们再对刚刚的登入功能创建Session

我们通过HttpServlet下的getSession方法获取到Session,然后再通过SetAttribute方法设置会话,保存在服务器中!

//优化后的UserController类!
package com.example.onlinemusic.controller;
​
import com.example.onlinemusic.mapper.UserMapper;
import com.example.onlinemusic.model.Contant;
import com.example.onlinemusic.model.User;
import com.example.onlinemusic.tools.ResponseBodyMessage;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
​
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
​
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: hold on
 * Date: 2022-07-26
 * Time: 15:12
 */
@RestController // @ResponseBody + @Controller
@RequestMapping("/user") //设置路由 用来映射请求!
public class UserController {
    //将UserMapper注入!
    @Resource
    private UserMapper userMapper;
​
    @RequestMapping("/login")
    //@RequestParam SpringMVC下的注解,表示该参数必须传入给服务器!
    //value = "前端参数名",required = true/false,defaultValue ="默认值"
    //这里required设置为ture表示该参数必传,默认为true,如果设置了defaultValue那默认required为false
    public ResponseBodyMessage<User> login(@RequestParam String username, @RequestParam String password, HttpServletRequest request){
        User userLogin = new User();
        userLogin.setUsername(username);
        userLogin.setPassword(password);
        //调用mapper下的 login查询user!
        User user = userMapper.login(userLogin);
        //返回响应
        if(user!=null){//登入成功!
            //登入成功就在服务器保存该Session会话!
            //这里我们的key值可以通过常量值设置,避免后面出错!
            //request.getSession().setAttribute("USERINFO_SESSION_KEY",user);
           // request.getSession().setAttribute(Contant.USERINFO_SESSION_KEY,user);
          return new  ResponseBodyMessage<User> (0,"登入成功",userLogin);
        }else{
          return new  ResponseBodyMessage<User> (-1,"登入失败",userLogin);
        }
    }
}
​

我们通过Fiddler抓包获取响应,

设置了Session会话响应

image-20220726221715118

未设置Session会话响应!

image-20220726221843242

我们可以看到设置了的返回的响应头中有Session信息,否则没有!