最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解spring cloud ouath2中的資源服務(wù)器

 更新時間:2021年02月11日 08:17:01   作者:小黃雞1992  
這篇文章主要介紹了spring cloud ouath2中的資源服務(wù)器的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

資源服務(wù)器就是業(yè)務(wù)服務(wù) 如用戶服務(wù),訂單服務(wù)等 第三方需要到資源服務(wù)器調(diào)用接口獲取資源

ResourceServerConfig

ResourceServerConfig是資源服務(wù)器的核心配置 用于驗證token 與網(wǎng)關(guān)配置相似

其中.antMatchers("/**").access("#oauth2.hasScope('user')") 需要oauth_client_details表的scope配合 意思是訪問所有資源 需要客戶端有scope需要有user

@Configuration
@EnableResourceServer // 標(biāo)識為資源服務(wù)器,請求服務(wù)中的資源,就要帶著token過來,找不到token或token是無效訪問不了資源
@EnableGlobalMethodSecurity(prePostEnabled = true) // 開啟方法級別權(quán)限控制
public class ResourceServerConfig extends ResourceServerConfigurerAdapter implements CommandLineRunner {
 
 private final static Logger logger = LoggerFactory.getLogger(ResourceServerConfig.class);
 
 public static final String RESOURCE_ID = "user";
 
 /**
 * 權(quán)限不足返回給前端json
 */
 @Autowired
 private CustomAccessDeniedHandlerConfig customAccessDeniedHandlerConfig;
 
 @Autowired
 private TokenStore tokenStore;
 
 /**
 * token無效返回前段json
 */
 @Autowired
 private AuthExceptionEntryPointConfig authExceptionEntryPointConfig;
 
 @Override
 public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
 // 當(dāng)前資源服務(wù)器的資源id,認(rèn)證服務(wù)會認(rèn)證客戶端有沒有訪問這個資源id的權(quán)限,有則可以訪問當(dāng)前服務(wù)
 resources.tokenStore(tokenStore).resourceId(RESOURCE_ID)
  // token無效異常的處理
  .authenticationEntryPoint(authExceptionEntryPointConfig)
  // 權(quán)限不足異常處理類
  .accessDeniedHandler(customAccessDeniedHandlerConfig)
  // 會話機(jī)制stateless開啟
  .stateless(true);
 }
 
 @Override
 public void configure(HttpSecurity http) throws Exception {
 http.sessionManagement()
  // SpringSecurity不會使用也不會創(chuàng)建HttpSession實例 因為整個oauth2后使用token
  .sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests()
  // 開放swagger請求
  .antMatchers("/swagger-ui.html", "/webjars/**", "/swagger-resources/**","/v2/**").permitAll()
  // 所有請求,都需要有all范圍(scope)
  .antMatchers("/**").access("#oauth2.hasScope('user')").
  anyRequest().authenticated().and().csrf()
  .disable();
 }
 
 @Bean
 public PasswordEncoder passwordEncoder() {
 return new BCryptPasswordEncoder();
 }
}

AuthExceptionEntryPointConfig,CustomAccessDeniedHandlerConfig

用于異常返回前端json

@Component
public class CustomAccessDeniedHandlerConfig implements AccessDeniedHandler {
 
 @Override
 public void handle(HttpServletRequest request, HttpServletResponse response,
 AccessDeniedException accessDeniedException) throws IOException, ServletException {
 response.setStatus(HttpStatus.OK.value());
 response.setHeader("Content-Type", "application/json;charset=UTF-8");
 try {
  Result result = new Result(403, "權(quán)限不足");
  response.getWriter().write(new ObjectMapper().writeValueAsString(result));
 } catch (IOException e) {
  e.printStackTrace();
 }
 }
}
@Component
public class AuthExceptionEntryPointConfig implements AuthenticationEntryPoint{
 
 private final static Logger logger = LoggerFactory.getLogger(AuthExceptionEntryPointConfig.class);
 
 @Value("${security.redirect-url}")
 private String redirectUrl;
 
 @Override
 public void commence(HttpServletRequest request, HttpServletResponse response,
 AuthenticationException authException) {
 Throwable cause = authException.getCause();
 response.setStatus(HttpStatus.OK.value());
 response.setHeader("Content-Type", "application/json;charset=UTF-8");
 Result result;
 try {
  if (cause instanceof InvalidTokenException) {
  result = new Result(402, "認(rèn)證失敗,無效或過期token");
  response.getWriter().write(new ObjectMapper().writeValueAsString(result));
  } else {
  result = new Result(401, "認(rèn)證失敗,沒有攜帶token");
  response.sendRedirect(redirectUrl);
  }
 
 } catch (IOException e) {
  e.printStackTrace();
 }
 }
}

TokenConfig

不多說

@Configuration
public class TokenConfig{
 
 /**
 * 使用redis存儲
 */
 @Autowired
 private RedisConnectionFactory redisConnectionFactory;
 
 @Bean
 public TokenStore tokenStore() {
 return new RedisTokenStore(redisConnectionFactory);
 }
 
}

application.yml

那么小伙伴又問了 既然網(wǎng)關(guān)驗證token的有效性 那么資源服務(wù)器是不是就不用驗證啦 答案是否 因為不添加配置 會報錯 同樣需要在application中添加以下配置

其他配置也spirng boot為準(zhǔn) 這里不多說

security:
 oauth2:
 client:
 client-id: user-vue
 client-secret: 1234
 resource:
 token-info-uri: http://localhost:8001/oauth/check_token

到此這篇關(guān)于spring cloud ouath2中的資源服務(wù)器的文章就介紹到這了,更多相關(guān)spring cloud ouath2資源服務(wù)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis入門實例教程之創(chuàng)建一個簡單的程序

    MyBatis入門實例教程之創(chuàng)建一個簡單的程序

    這篇文章主要介紹了MyBatis入門創(chuàng)建一個簡單的程序,在?MySQL?中創(chuàng)建數(shù)據(jù)庫?mybatisdemo,編碼為?utf8,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • 詳解java中float與double的區(qū)別

    詳解java中float與double的區(qū)別

    這篇文章主要介紹了JAVA中float與double的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • java隊列之queue用法實例分析

    java隊列之queue用法實例分析

    這篇文章主要介紹了java隊列之queue用法實例分析,Queue 隊列就是一個先入先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),Queue接口繼承Collection接口。感興趣的可以了解一下
    2020-07-07
  • SpringCloud-Gateway網(wǎng)關(guān)的使用實例教程

    SpringCloud-Gateway網(wǎng)關(guān)的使用實例教程

    Gateway網(wǎng)關(guān)在微服務(wù)架構(gòu)中扮演了不可或缺的角色,通過集中化管理、智能路由和強(qiáng)大的過濾器機(jī)制,為構(gòu)建高效、可擴(kuò)展的微服務(wù)系統(tǒng)提供了有力支持,這篇文章主要介紹了SpringCloud-Gateway網(wǎng)關(guān)的使用,需要的朋友可以參考下
    2024-03-03
  • SpringMVC適配器模式作用范圍介紹

    SpringMVC適配器模式作用范圍介紹

    適配器這個詞我們應(yīng)該很熟悉,天天都在使用,手機(jī)充電時,電源線頭頭就叫電源適配器,干什么用的呢?把220V電壓轉(zhuǎn)換成手機(jī)充電時使用的電壓,那么適配器是不是很好理解了,下面看一下
    2023-04-04
  • JavaBean和Map轉(zhuǎn)換封裝類的方法

    JavaBean和Map轉(zhuǎn)換封裝類的方法

    下面小編就為大家?guī)硪黄狫avaBean和Map轉(zhuǎn)換封裝類的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • 運用Spring?Aop+注解實現(xiàn)日志記錄

    運用Spring?Aop+注解實現(xiàn)日志記錄

    我們都知道Spring框架的兩大特性分別是 IOC (控制反轉(zhuǎn))和 AOP (面向切面),這個是每一個Spring學(xué)習(xí)視頻里面一開始都會提到的,這里,如果我們使用Aop來記錄日志,那是再好不過了,感興趣的朋友跟隨小編一起學(xué)習(xí)下Spring?Aop注解實現(xiàn)日志記錄的過程吧
    2022-01-01
  • springboot 啟動項目打印接口列表的實現(xiàn)

    springboot 啟動項目打印接口列表的實現(xiàn)

    這篇文章主要介紹了springboot 啟動項目打印接口列表的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 詳解怎么用Java的super關(guān)鍵字

    詳解怎么用Java的super關(guān)鍵字

    今天帶大家學(xué)習(xí)Java中super關(guān)鍵字是怎么用的,文中有非常詳細(xì)的介紹,對正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • SpringBoot項目啟動過程動態(tài)修改接口請求路徑的解決方案

    SpringBoot項目啟動過程動態(tài)修改接口請求路徑的解決方案

    在SpringBoot服務(wù)整合過程中,遇到了多個服務(wù)中相同RequestMapping路徑導(dǎo)致的啟動問題,解決方案是通過修改RequestMappingHandlerMapping類的getMappingForMethod方法,本文給大家介紹SpringBoot修改接口請求路徑的解決方案,感興趣的朋友一起看看吧
    2024-09-09

最新評論

扎兰屯市| 佛教| 江源县| 芦山县| 中牟县| 南阳市| 元氏县| 天全县| 哈巴河县| 桃江县| 章丘市| 冷水江市| 蓬莱市| 济阳县| 惠州市| 寿宁县| 芮城县| 苍溪县| 比如县| 寿阳县| 灵璧县| 平远县| 五指山市| 奈曼旗| 裕民县| 泗洪县| 乌苏市| 卢龙县| 大邑县| 霍林郭勒市| 颍上县| 明光市| 白河县| 鄢陵县| 凤凰县| 藁城市| 永平县| 遵化市| 辽宁省| 营山县| 和顺县|