激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 詳解spring cloud ouath2中的資源服務(wù)器

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

2021-08-08 11:49小黃雞1992 Java教程

這篇文章主要介紹了spring cloud ouath2中的資源服務(wù)器的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

ResourceServerConfig

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@Configuration
@EnableResourceServer // 標(biāo)識(shí)為資源服務(wù)器,請(qǐng)求服務(wù)中的資源,就要帶著token過(guò)來(lái),找不到token或token是無(wú)效訪問(wèn)不了資源
@EnableGlobalMethodSecurity(prePostEnabled = true) // 開(kāi)啟方法級(jí)別權(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無(wú)效返回前段json
 */
 @Autowired
 private AuthExceptionEntryPointConfig authExceptionEntryPointConfig;
 
 @Override
 public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
 // 當(dāng)前資源服務(wù)器的資源id,認(rèn)證服務(wù)會(huì)認(rèn)證客戶(hù)端有沒(méi)有訪問(wèn)這個(gè)資源id的權(quán)限,有則可以訪問(wèn)當(dāng)前服務(wù)
 resources.tokenStore(tokenStore).resourceId(RESOURCE_ID)
  // token無(wú)效異常的處理
  .authenticationEntryPoint(authExceptionEntryPointConfig)
  // 權(quán)限不足異常處理類(lèi)
  .accessDeniedHandler(customAccessDeniedHandlerConfig)
  // 會(huì)話機(jī)制stateless開(kāi)啟
  .stateless(true);
 }
 
 @Override
 public void configure(HttpSecurity http) throws Exception {
 http.sessionManagement()
  // SpringSecurity不會(huì)使用也不會(huì)創(chuàng)建HttpSession實(shí)例 因?yàn)檎麄€(gè)oauth2后使用token
  .sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests()
  // 開(kāi)放swagger請(qǐng)求
  .antMatchers("/swagger-ui.html", "/webjars/**", "/swagger-resources/**","/v2/**").permitAll()
  // 所有請(qǐng)求,都需要有all范圍(scope)
  .antMatchers("/**").access("#oauth2.hasScope('user')").
  anyRequest().authenticated().and().csrf()
  .disable();
 }
 
 @Bean
 public PasswordEncoder passwordEncoder() {
 return new BCryptPasswordEncoder();
 }
}

AuthExceptionEntryPointConfig,CustomAccessDeniedHandlerConfig

用于異常返回前端json

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@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();
 }
 }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@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)證失敗,無(wú)效或過(guò)期token");
  response.getWriter().write(new ObjectMapper().writeValueAsString(result));
  } else {
  result = new Result(401, "認(rèn)證失敗,沒(méi)有攜帶token");
  response.sendRedirect(redirectUrl);
  }
 
 } catch (IOException e) {
  e.printStackTrace();
 }
 }
}

TokenConfig

不多說(shuō)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Configuration
public class TokenConfig{
 
 /**
 * 使用redis存儲(chǔ)
 */
 @Autowired
 private RedisConnectionFactory redisConnectionFactory;
 
 @Bean
 public TokenStore tokenStore() {
 return new RedisTokenStore(redisConnectionFactory);
 }
 
}

application.yml

那么小伙伴又問(wèn)了 既然網(wǎng)關(guān)驗(yàn)證token的有效性 那么資源服務(wù)器是不是就不用驗(yàn)證啦 答案是否 因?yàn)椴惶砑优渲?會(huì)報(bào)錯(cuò) 同樣需要在application中添加以下配置

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

?
1
2
3
4
5
6
7
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)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_20143059/article/details/113766105

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久精品亚洲一区二区三区观看模式 | 中文日韩欧美 | 嫩草影院在线观看网站成人 | 日本欧美一区二区三区在线观看 | 经典三级在线视频 | 逼片 | jizzjizzjizzjizz国产| 亚洲欧美国产高清 | 中文字幕一区二区三区久久 | 成年人在线视频免费 | 精品国产一区二区亚洲人成毛片 | 欧美成人精品一区二区三区 | 爱唯侦察 国产合集 亚洲 | 免费欧美一级视频 | 电视剧全部免费观看 | 99在线精品视频免费观看20 | 成人午夜精品 | 亚洲精华液久久含羞草 | 国产免费黄色 | 国产精品久久av | 国产日韩中文字幕 | 国产高潮国产高潮久久久91 | 亚洲网站在线播放 | 一区二区三区日本在线观看 | 亚洲国产精品久久久久久久 | 国产一区二区三区高清 | 久久最新网址 | 国产在线欧美 | 国产99久久久久久免费看农村 | 国产亚洲福利 | 亚洲人成网站免费播放 | 久久成人视屏 | 欧美成人a| 草妞视频 | 国产免费最爽的乱淫视频a 午夜精品久久久久久久99热浪潮 | 国产亚洲精彩视频 | 羞羞网站在线观看入口免费 | 欧美 日韩 亚洲 中文 | 欧美a视频 | 宅男噜噜噜66国产在线观看 | 久久久www视频 |