开发喵星球

若依未分离版集成jwt实现登录授权访问(五十八)

jwt适用于前后端分离,但是不分离版本对外提供接口有时候也需要,参考步骤如下。

一、添加jwt依赖文件

ruoyi-framework\pom.xml添加jwt依赖

<!-- jwt jar-->
<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.4.0</version>
</dependency>

二、增加jwt登录方法

ruoyi-admin模块src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@Autowired
private ISysUserService userService;

@Autowired
private SysPasswordService passwordService;


@PostMapping("/jwt/login")
@ResponseBody
public AjaxResult jwtLogin(String username, String password)
{
    if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password))
    {
        return AjaxResult.error("账号和密码不能为空!");
    }

    SysUser user = userService.selectUserByLoginName(username);
    if (user == null)
    {
        return AjaxResult.error("用户不存在/密码错误!");
    }

    if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
    {
        return AjaxResult.error("对不起,您的账号已被删除!");
    }

    if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
    {
        return AjaxResult.error("用户已封禁,请联系管理员!");
    }

    if (!passwordService.matches(user, password))
    {
        return AjaxResult.error("用户不存在/密码错误!");
    }

    String token = JwtUtils.createToken(username, user.getPassword());
    return AjaxResult.success("登录成功,请妥善保管您的token信息").put("token", token);
}

三、下载插件相关包和代码

插件相关包和代码实现ruoyi/集成jwt实现权限登录授权.zip
链接: https://pan.baidu.com/s/13JVC9jm-Dp9PfHdDDylLCQ
提取码: y9jt

四、增加测试接口

ruoyi-admin模块 src/main/java/com/ruoyi/web/controller/system/ApiController.java

package com.ruoyi.web.controller.system;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.domain.AjaxResult;

@RestController
@RequestMapping("/api")
public class ApiController
{
  /**
   * 无权限访问
   *
   * @return
   */
  @GetMapping("/list")
  public AjaxResult list()
  {
    return AjaxResult.success("list success");
  }

  /**
   * 菜单权限 system:user:list
   */
  @GetMapping("/user/list")
  @RequiresPermissions("system:user:list")
  public AjaxResult userlist()
  {
    return AjaxResult.success("user list success");
  }

  /**
   * 角色权限 admin
   */
  @GetMapping("/role/list")
  @RequiresRoles("admin")
  public AjaxResult rolelist()
  {
    return AjaxResult.success("role list success");
  }
}

五、jwt登录接口测试

测试接口,我们利用postman进行测试
(1)获取token
只有当用户名和密码输入正确的时候,才会返回token,否则会提示用户不存在/密码错误。

(2)测试接口
请求头header中不携带token参数会报401授权异常。

请求头header中携带token参数,则会正常返回数据

   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2023-12-04 16:35:25 阅读量:156
<<   >>


powered by kaifamiao