使用拦截器和JWT实现Java后端接口的权限访问控制

最近发现,后端接口的权限访问控制通过使用springmvc里面的拦截器,就能够实现,方法比较简单,这里做一些总结。

1、在登录接口查询数据库中的用户信息和权限信息,得到当前用户相关的权限,然后把权限信息添加到JWT的字符串里面,经过加密以后生成token,将token作为响应数据,传递给前端。

2、定义一个拦截器,从请求头当中取出token,对token进行解密,得到里面的权限信息,然后获取当前访问接口的名称,与token中的权限信息进行比对,如果用户拥有当前接口的权限,就允许访问,否则就抛异常,代码如下

@Component
public class JwtInterceptor implements HandlerInterceptor {

    @Autowired
    private JWTUtils jwtUtils;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String authorization = request.getHeader("Authorization");
        if (!ObjectUtils.isEmpty(authorization) && authorization.startsWith("Bearer")){
            String token = authorization.replace("Bearer ", "");
            DecodedJWT jwt = jwtUtils.verifyToken(token);
            if (jwt!=null){
                //判断token是否拥有接口的权限
                HandlerMethod handlerMethod= (HandlerMethod) handler;
                String name = handlerMethod.getMethodAnnotation(RequestMapping.class).name();
                String perms = jwt.getClaim("perms").asString();
                if (perms.contains(name)){
                    request.setAttribute("user_jwt",jwt);
                    return true;
                }
                throw new CommonException(ResultCode.UNAUTHORISE);
            }
        }
        throw new CommonException(ResultCode.UNAUTHENTICATED);
    }
}

3、在接口的注解部分,加上name属性,用于和权限标识进行比对,代码如下

@PostMapping(value = "/user",name = "user-save")
public Result save(@RequestBody User user)
  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值