当前位置: 首页 > 科技观察

SpringBoot的RESRfulAPI权限控制

时间:2023-03-12 07:12:06 科技观察

1.为什么要使用RESTfulAPI1.1什么是RESTful?RESTful(RepresentationalStateTransfer)架构风格是一种Web自己的架构风格,底层主要基于HTTP协议(ps:作者是HTTP协议),分布式应用架构的一大实用理论。RESTful架构是无状态的,以请求-响应的形式存在,这与基于Bower的SessionId不同。1.2理解REST有五点:1.资源2.资源表达3.状态传递4.统一接口5.超文本驱动需要了解详情请点击【传送门】1.3什么是RESTAPI?基于RESTful架构的一套互联网分布式API设计理论。它与上述资源、状态和统一接口密切相关。为什么分布式互联网架构如此普遍?请看下面两种模式:MVC模式:RESTAPI模式:1.4如何控制权限?资源的RESTful方法定义分为两种类型:简单的和复杂的。基本方法定义:GET/user#获取用户列表GET/user/3#查看序号为3的用户POST/user#创建新用户PUT/user/3#更新序号为3的用户DELETE/user/3#删除user3资源之间关联方法定义如下:GET/admin/1/user/10#Administrator1,查看序号为3的用户信息……那么如何控制权限呢?2.权限控制前面说了RESTful是无状态的。所以每个请求都需要经过身份验证和授权。2.1Authentication身份认证,即登录时验证用户是否具有相应的身份。简单的说就是点击网页登录后,服务器验证用户的密码。2.2权限验证(授权)也可称为授权,即经过身份认证后,验证该身份具有一定的权限。即对于某个资源的CRUD,不同的用户有不同的操作权限。一般简单的项目:做一个sign(加密和salt参数)+如果用户的access_token复杂,加上SLL,使用OAuth2进行token的安全传输。自然,技术是为应用场景服务的。它简单并且可以处理应用场景。简单实用~3.AccessToken权限解决方案3.1AccessToken拦截器/***AccessToken拦截器*

*Createdbysocketon16/4/18.*/@ComponentpublicclassAccessTokenVerifyInterceptorextendsHandlerInterceptorAdapter{@AutowiredValidationServicevalidationService;privatefinalstaticLoggerLOG=LoggerFactoryTokentorifyHpublicVactor(AccessOverbo.class);(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{LOG.info("AccessTokenexecuting...");booleanflag=false;//tokenStringaccessToken=request.getParameter("token"lantils.is(StringUlanktils.is(accessToken)){//ValidationValidationModelv=validationService.verifyAccessToken(accessToken);//时间到期//用户验证if(v!=null){Useruser=userService.findById(v.getUid());if(user!=null){request.setAttribute(CommonConst.PARAM_USER,user);LOG.info("AccessTokenSUCCESS...user:"+user.getUserName()+"-"+accessToken);flag=true;}}}if(!flag){response.setStatus(HttpStatus.禁止DEN.value());response.getWriter().print("AccessTokenERROR");}returnflag;}}***步骤:从请求中获取tokenStep2:根据token获取验证对象信息(过期时间也可以加上时间验证,简单)第三步:通过验证信息获取用户信息3.2Configuration拦截/***MVC设置**/@ConfigurationpublicclassWebMvcConfigextendsWebMvcConfigurerAdapter{@BeanpublicAccessTokenVerifyInterceptortokenVerifyInterceptor(){returnnewAccessTokenVerifyInterceptor();}@OverridepublicvoidaddInterceptorRegistryRegistryptors(Interregistry(tokenifyInterceptor).addInterceptor).addPathPatterns("/test");super.addInterceptors(registry);}}第一步:将拦截器配置为Bean第二步:注册拦截器注入拦截器并配置拦截URLtoken存放在哪里?ehcache、redis、db都可以自然而简单,当然是db。四、总结1.RESTAPI2.SpringBoot拦截器【本文为专栏作者“李强强”原创稿件,转载请联系作者获得授权】点此查看作者更多好文