0
点赞
收藏
分享

微信扫一扫

springboot入门项目-用户登录2-控制层

sullay 2022-04-14 阅读 43
1. 异常处理

业务层抛出的异常,需要在统一异常处理类中进行捕获和处理;如果抛出的异常类型已经在统一异常处理类中处理过,则不需要重复处理。

2. 设计请求

请求路径:/users/login
请求方法:POST
请求数据:String username, String password
响应结果:JsonResult< User >

3. 处理请求

UserController类中添加控制器方法:

 @RequestMapping("/login")
    public JsonResult<User> login(String username, String password) {
        User user = userService.login(username, password);
        return new JsonResult<>(OK, user);
    }
4. 测试

正常访问:
在这里插入图片描述
用户名不存在情况:
在这里插入图片描述
用户密码错误情况:
在这里插入图片描述

5. 优化-用户会话session

用户登录的数据信息在其他页面也会用到,因此考虑在登录时所获取的用户数据,转移到session对象。

  1. session对象主要存在服务器端,可以用于保存服务器的临时数据的对象,所保存的数据可以在整个项目中访问获取,把session的数据看作一个共享的数据。首次登录时所获取的用户数据,转移到session对象即可。session.getAttribute(“key”)可以将获取session中的数据这种行为进行封装,封装在BaseController类中。
   /*从session中获取uid
    protected:不同包的子类可以访问
    final:不能再被更改(子类重写)
    HttpSession是接口,session是该接口实现类的实例对象
     */
    protected final Integer getUidFromSession(HttpSession session) {

        return Integer.valueOf(session.getAttribute("uid").toString());
    }

    /*从session中获取username
     */
    protected final String getUsernameFromSession(HttpSession session) {
        return session.getAttribute("username").toString();
    }
  1. 在登陆的控制器方法中将数据封装到session对象中。服务器本身自动创建了session对象,已经是一个全局的session对象。Springboot直接使用session对象,将HttpSession类型的对象作为请求处理方法的形参,会自动将全局session对象注入到请求处理方法的形参中。
    @RequestMapping("/login")
    public JsonResult<User> login(String username, String password, HttpSession session) {
        User data = userService.login(username, password);
        //向session对象中完成数据的绑定(session是全局的)
        session.setAttribute("uid", data.getUid());
        session.setAttribute("username", data.getUsername());
        //测试一下是否能拿到数据
//        System.out.println(getUidFromSession(session));
//        System.out.println(getUsernameFromSession(session));
        return new JsonResult<>(OK, data);
    }
    ```
    
举报

相关推荐

0 条评论