jwt适用于前后端分离,但是不分离版本对外提供接口有时候也需要,参考步骤如下。
ruoyi-framework\pom.xml添加jwt依赖
<!-- jwt jar-->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
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");
}
}
测试接口,我们利用postman进行测试
(1)获取token
只有当用户名和密码输入正确的时候,才会返回token,否则会提示用户不存在/密码错误。
(2)测试接口
请求头header中不携带token参数会报401授权异常。
请求头header中携带token参数,则会正常返回数据
powered by kaifamiao