文章目录
Controller层
- Controller层
- Service
- 测试
在UserController中,删除用户的方法如下
/**
* 删除
* @param id
*/
@RequestMapping(value="/{id}",method= RequestMethod.DELETE)
public Result delete(@PathVariable String id ){
userService.deleteById(id);
return new Result(true,StatusCode.OK,"删除成功");
}
Service
在service层, 对token的验证进行了一系列的操作,具体的代码如下
/**
* 删除
* @param id
*/
public void deleteById(String id) {
String header = request.getHeader("Authorization");
if (StringUtils.isBlank(header)) {
//如果获取的Authorization头为空 那么抛出异常, 而不是直接return,因为这是service层
throw new RuntimeException("权限不足!");
}
if (!header.startsWith("Bearer ")) {
//判断, 如果该请求头不是以Bearer加空格开头的,那么也是权限不足的
throw new RuntimeException("权限不足!");
}
//获取token. 从第七位截取,因为前面的是Bearer
String token = header.substring(7);
//解析token的过程可能会抛出异常,因此使用try catch
try {
//解析token
Claims claims = jwtUtil.parseJWT(token);
//获取角色信息
String roles = (String) claims.get("roles");
//判断角色是否为空,或者是不是admin角色
if (roles == null || !roles.equals("admin")) {
//如果角色为空,或者不是admin角色,那么抛出异常,权限不足
throw new RuntimeException("权限不足!");
}
} catch (RuntimeException e) {
//解析token的过程抛出异常, 也代表权限不足
//异常可能的原因是token过期等等
throw new RuntimeException("权限不足!");
}
//上面的权限信息验证完成后, 进行用户的删除
userDao.deleteById(id);
}
测试
启动tensquare_user项目. 在postman中进行测试. 首先执行管理员的登录操作, 获取token如下 eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMDg5ODU1MTIzNTc4MDMyMTI4Iiwic3ViIjoiYWRtaW4iLCJpYXQiOjE1NTAyODcwMDYsInJvbGVzIjoiYWRtaW4iLCJleHAiOjE1NTAyOTA2MDZ9.zN100XyoUNjKaGnyzVYmuKCb2hk7z9278O6ylFt9-AM
接着进行user的删除操作. 在数据库中,存在user的id如下 在postman中发送如下的delete请求
http://localhost:9008/user/1089866410982772736
在Authorization中, 选择Bearer Token 在后面的值中, 填写上token
最终的效果是在header中, 会带上该token . key为Authorization value为Bearer 加上空格和token
执行该请求,响应数据为删除成功,代表生成成功删除