第十三节 资源服务和认证服务通信,校验token

由于本项目资源服务和认证服务不在同一服务上,这里token‘认证使用远程认证服务器认证

修改资源服务器的配置,主要在配置类继承资源配置ResourceServerConfigurerAdapter的configure方法

1) 设置RestTemplate,默认RestTemplate有些格式无法解析,配置相关解析器

@LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        //httpRequestFactory()
        RestTemplate restTemplate = new RestTemplate();
        List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                MappingJackson2HttpMessageConverter jsonConverter = (MappingJackson2HttpMessageConverter) converter;
                jsonConverter.setObjectMapper(new ObjectMapper());
                jsonConverter.setSupportedMediaTypes(ImmutableList.of(new MediaType("application", "json", MappingJackson2HttpMessageConverter.DEFAULT_CHARSET), new MediaType("text", "javascript", MappingJackson2HttpMessageConverter.DEFAULT_CHARSET)));
            }
        }
        return restTemplate;
    }

2) 设置token解析器,因为认证服务使用的为默认解析器,这里保持一致

 @Bean
        public AccessTokenConverter accessTokenConverter() {
        return new DefaultAccessTokenConverter();
    }
  1. 设置远程远程调用服务,以及配置
@Override
    public void configure(ResourceServerSecurityConfigurer resources) {
        resources.tokenServices(tokenServices());//.resourceId(SPARKLR_RESOURCE_ID);
    }
  @Bean
  public ResourceServerTokenServices tokenServices() {
        RemoteTokenServices remoteTokenServices = new RemoteTokenServices();
        remoteTokenServices.setCheckTokenEndpointUrl("https://security-service/oauth/check_token");
//这里硬编码客户端信息,服务端硬编码保存在内存里,生产上请修改
        remoteTokenServices.setClientId("client");
        remoteTokenServices.setClientSecret("password");
      remoteTokenServices.setRestTemplate(restTemplate());
        remoteTokenServices.setAccessTokenConverter(accessTokenConverter());
        return remoteTokenServices;
    }

认证服务的修改 1) 为了是校验请求通过,认证服务,修改配置public class OAuth2Config extends AuthorizationServerConfigurerAdapter 增加.checkTokenAccess("permitAll()")

 @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security
                // 开启/oauth/token_key验证端口无权限访问
                .tokenKeyAccess("permitAll()")
                .checkTokenAccess("permitAll()")
                .passwordEncoder(new BCryptPasswordEncoder())
//        请求/oauth/token的,如果配置支持allowFormAuthenticationForClients的,且url中有client_id和client_secret的会走ClientCredentialsTokenEndpointFilter
                .allowFormAuthenticationForClients();
    }

测试如下

  1. 正确携带token访问api-server的接口

图片.png

  1. 不使用token、或者错误token使用,返回401或者token异常500

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SpringBoot

如何配置spring+springmvc+mybatis环境

18530
来自专栏程序猿DD

Spring Cloud构建微服务架构:服务消费(Ribbon)【Dalston版】

前言通过上一篇《Spring Cloud构建微服务架构:服务消费(基础)》,我们已经学会如何通过LoadBalancerClient接口来获取某个服务的具体实例...

22560
来自专栏Albert陈凯

Hadoop数据分析平台实战——150Flume介绍离线数据分析平台实战——150Flume介绍

离线数据分析平台实战——150Flume介绍 Nginx介绍 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。...

32470
来自专栏Android 研究

Android JNI学习(二)——实战JNI之“hello world”

首先在Android Studio创建一个Android项目,包名为gebilaolitou.ndkdemo

37640
来自专栏杂烩

一个综合的分布式项目之功能代码 原

    看过第一篇博客的应该都知道流程,虽然并不是一模一样,但大体是一样的,现在来确认具体方案。

36720
来自专栏一英里广度一英寸深度的学习

Flume 日志收集系统 Spooldir-Source HDFS-sink

消息 Record,Source封装Event(事件)成为Record对象,并保存到Channel中,Sink拉取Record并保存到目标系统中。

56740
来自专栏搜云库

Spring Cloud(五)断路器监控(Hystrix Dashboard)

在上两篇文章中讲了,服务提供者 Eureka + 服务消费者 Feign,服务提供者 Eureka + 服务消费者(rest + Ribbon),本篇文章结合,...

36060
来自专栏向治洪

Spring+SpringMVC+MyBatis整合

1、基本概念 1.1、Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在...

45160
来自专栏CodeSheep的技术分享

从SpringBoot到SpringMVC

用久了SpringBoot,深受其约定大于配置的便利性毒害之后,我想回归到SpringMVC时代,看看SpringMVC开发模式中用户是如何参与的。本文就来体验...

19180
来自专栏数据之美

Flume NG 简介及配置实战

Flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用。Flume 初始的发行版本目前被统称为 Flume OG(origin...

53690

扫码关注云+社区

领取腾讯云代金券