久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Spring boot 那些事之RESRful API 權(quán)限控制

 WindySky 2017-08-01

Spring boot 那些事之RESRful API 權(quán)限控制

Spring Boot,支持約定優(yōu)于配置,,讓開發(fā)人員盡快啟動并運行項目,。針對 Spring Boot 的學(xué)習(xí)和總結(jié)準(zhǔn)備寫系列文章,。

代碼共享在【springboot-learning-example】,spring boot 實踐學(xué)習(xí)案例,是 spring boot 初學(xué)者及核心技術(shù)鞏固的最佳實踐,。

文章安排如下:

  • 《Spring Boot 之 RESRful API 權(quán)限控制》
  • 《Spring Boot 之 HelloWorld 詳解》
  • 《Springboot 整合 Mybatis 的完整 Web 案例》
  • 《Springboot 實現(xiàn) Restful 服務(wù),基于 HTTP / JSON 傳輸》
  • 《Springboot 集成 FreeMarker》
  • 《Springboot 整合 Dubbo/ZooKeeper 詳解 SOA 案例》
  • 《Springboot 整合 Redis 實現(xiàn)緩存》
  • 《Springboot 整合 Druid 數(shù)據(jù)連接池》
  • 《Springboot 集成 Shiro 完成授權(quán)》
  • 《Springboot 實現(xiàn) Mybatis 多數(shù)據(jù)源配置》

—————————————————————————————————————————

Spring Boot 之 RESRful API 權(quán)限控制

一,、為何用RESTful API

1.1 RESTful是什么,?

RESTful(Representational State Transfer)架構(gòu)風(fēng)格,是一個Web自身的架構(gòu)風(fēng)格,,底層主要基于HTTP協(xié)議(ps:提出者就是HTTP協(xié)議的作者),,是分布式應(yīng)用架構(gòu)的偉大實踐理論,。RESTful架構(gòu)是無狀態(tài)的,,表現(xiàn)為請求-響應(yīng)的形式,有別于基于Bower的SessionId不同,。

1.2理解REST有五點:

1.資源

2.資源的表述

3.狀態(tài)的轉(zhuǎn)移

4.統(tǒng)一接口

5.超文本驅(qū)動

需要理解詳情,,請點[傳送門]

1.3 什么是REST API?

基于RESTful架構(gòu)的一套互聯(lián)網(wǎng)分布式的API設(shè)計理論,。和上面資源,,狀態(tài)和統(tǒng)一接口有著密切的關(guān)系。

為啥分布式互聯(lián)網(wǎng)架構(gòu)很常見呢,?請看下面兩個模式

MVC模式:

REST API模式:

1.4 權(quán)限怎么控制,?

RESTful針對資源的方法定義分簡單和關(guān)聯(lián)復(fù)雜兩種。

基本方法定義:

GET /user # 獲取user列表
GET /user/3 # 查看序號為3的user
POST /user # 新建一個user
PUT /user/3  # 更新序號為3的user
DELETE /user/3 #刪除user 3

資源之間的關(guān)聯(lián)方法如下定義:

GET /admin/1/user/10 # 管理員1號,,查看序號為3的user信息
...

那么權(quán)限如何控制,?

二、權(quán)限控制

前面說到,,RESTful是無狀態(tài)的,,所以每次請求就需要對起進(jìn)行認(rèn)證和授權(quán)。

2.1 認(rèn)證

身份認(rèn)證,,即登錄驗證用戶是否擁有相應(yīng)的身份,。簡單的說就是一個Web頁面點擊登錄后,服務(wù)端進(jìn)行用戶密碼的校驗,。

2.2 權(quán)限驗證(授權(quán))

也可以說成授權(quán),,就是在身份認(rèn)證后,驗證該身份具體擁有某種權(quán)限。即針對于某種資源的CRUD,不同用戶的操作權(quán)限是不同的,。

一般簡單項目:做個sign(加密加鹽參數(shù))+ 針對用戶的access_token

復(fù)雜的話,,加入 SLL ,并使用OAuth2進(jìn)行對token的安全傳輸,。

自然,,技術(shù)服務(wù)于應(yīng)用場景。既簡單又可以處理應(yīng)用場景即可,。簡單,,實用即可~

三、Access Token權(quán)限解決

3.1 AccessToken 攔截器

/**
 * Access Token攔截器
 * <p/>
 * Created by bysocket on 16/4/18.
 */
@Component
public class AccessTokenVerifyInterceptor extends HandlerInterceptorAdapter {
 
    @Autowired
    ValidationService validationService;
 
    private final static Logger LOG = LoggerFactory.getLogger(AccessTokenVerifyInterceptor.class);
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        LOG.info("AccessToken executing ...");
        boolean flag = false;
        // token
        String accessToken = request.getParameter("token");
        if (StringUtils.isNotBlank(accessToken)) {
            // 驗證
            ValidationModel v = validationService.verifyAccessToken(accessToken);
            // 時間過期
 
            // 用戶驗證
            if (v != null) {
                User user = userService.findById(v.getUid());
                if(user != null) {
                    request.setAttribute(CommonConst.PARAM_USER, user);
                    LOG.info("AccessToken SUCCESS ...  user:" + user.getUserName() + " - " + accessToken);
                    flag = true;
                }
            }
        }
 
        if (!flag) {
            response.setStatus(HttpStatus.FORBIDDEN.value());
            response.getWriter().print("AccessToken ERROR");
        }
 
        return flag;
    }
}

第一步:從request獲取token

第二步:根據(jù)token獲取校驗對象信息(也可以加入過期時間校驗,,簡單)

第三步:通過校驗信息獲取用戶信息

3.2 配置攔截

/**
 * MVC 設(shè)置
 *
 */
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
 
    @Bean
    public AccessTokenVerifyInterceptor tokenVerifyInterceptor() {
        return new AccessTokenVerifyInterceptor();
    }
 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(tokenVerifyInterceptor()).addPathPatterns("/test");
        super.addInterceptors(registry);
    }
 
}

第一步:將攔截器配置成Bean

第二步:攔截器注冊注入該攔截器,,并配置攔截的URL

token存哪里?

ehcache,,redis,,db都可以。自然簡單的當(dāng)然是db,。

四,、小結(jié)

1. REST API

2. Spring Boot 攔截器

原創(chuàng)出處:泥瓦匠BYSocket | 01001000-01001111-01001101-01000101 泥瓦匠BYSocket 希望轉(zhuǎn)載,保留摘要,,謝謝,!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多