栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用拦截器和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)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/723846.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号