• Spring Cloud进阶之路 | 九:资源服务(Spring Cloud Oauth2)


    转载请注明作者及出处:

    作者:银河架构师

    原文链接:https://www.cnblogs.com/luas/p/12201421.html

    ​如上一篇文章Spring Cloud进阶之路 | 八:授权服务(Spring Cloud Oauth2)中所述,授权服务和资源服务总是同时存在的,本文即针对资源服务器相关配置进行讲解。

    搭建资源服务器

    复用之前文章中的xmall-product商品工程,进行相关改造。

    添加依赖

    添加spring-cloud-starter-oauth2依赖,修改后的pom文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion><parent>
        <groupId>com.luas.cloud</groupId>
        <artifactId>java-boot-parent-2.1</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../../java-boot-parent-2.1</relativePath>
      </parent><groupId>com.luas.cloud</groupId>
      <artifactId>xmall-product</artifactId>
      <version>1.0.0-SNAPSHOT</version><name>xmall-product</name>
      <description>Spring Cloud Learning,nacos-client</description><dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency><dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-oauth2</artifactId>
        </dependency><!-- nacos cloud -->
        <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency><dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency><dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
        </dependency>
      </dependencies><build>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build></project>

    Oauth2资源服务器配置

    在application.yml中进行oauth2资源器信息配置,user信息获取地址为文章Spring Cloud进阶之路 | 八:授权服务(Spring Cloud Oauth2)中定义的用户信息查询端点-http://localhost:7777/oauth/user。

    server:
      port: 8080
    ​
    security:
      oauth2:
        resource:
          user-info-uri: http://localhost:7777/oauth/user
          prefer-token-info: false

    开启资源服务器

    添加@EnableResourceServer注解即可开启资源服务器,有两种方法添加该注解。

    第一种,直接在启动类添加。

    package com.luas.xmall;
    ​
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
    ​
    @EnableResourceServer
    @SpringBootApplication
    public class XmallProductApplication {
    ​
      public static void main(String[] args) {
        SpringApplication.run(XmallProductApplication.class, args);
      }
    ​
    }

    第二种,如果针对资源服务器有相关配置,则需要添加ResourceServerConfiguration,此时可在此类添加。

    package com.luas.xmall.configuration;
    ​
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
    import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
    ​
    @Configuration
    @EnableResourceServer
    public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
        @Override
        public void configure(HttpSecurity http) throws Exception {
            http
                    .requestMatchers()
                    .anyRequest()
                    .and()
                    .authorizeRequests()
                    .anyRequest()
                    .authenticated();
        }
    }

    如资源服务器没有特殊配置,可直接在启动类添加@EnableResourceServer注解。

    身份认证

    先启动xmall-auth授权服务器,端口为7777。然后再启动xmall-product工程,端口为8080。

    先通过Postman访问http://localhost8080/sku/1122,发现不能像之前一样正常访问了。

    通过返回结果中的信息,可以发现一些蛛丝马迹,大概率是因为没有授权,身份认证未通过。

    结合前篇文章Spring Cloud进阶之路 | 八:授权服务(Spring Cloud Oauth2)中授权流程的介绍,基本已可以确认是身份认证环节出了问题,当前用户没有经过授权,即访问受保护的资源。

    此时,解决方法有两种,如果当前请求是公共资源,无需身份认证,那么,需要在资源服务配置中,允许该资源可以未经授权访问。

    package com.luas.xmall.configuration;
    ​
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
    import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
    ​
    @Configuration
    @EnableResourceServer
    public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
        @Override
        public void configure(HttpSecurity http) throws Exception {
            http
                    .requestMatchers()
                    .anyRequest()
                    .and()
                    .authorizeRequests()
                    .antMatchers("/application").permitAll()
                    .anyRequest()
                    .authenticated();
        }
    }

    重启xmall-product工程,再次访问http://localhost:8080/application,可以正常访问。

    如果当前请求资源不是公共资源,那么就需要先从授权服务器请求授权,然后携带授权再次访问该资源即可。

    先从授权服务器请求授权。

    携带该授权(header方式)访问资源。

    资源服务器改造完成!

    源码

    github

    https://github.com/liuminglei/SpringCloudLearning/tree/master/09/

    gitee

    https://gitee.com/xbd521/SpringCloudLearning/tree/master/09/

    微信搜索【银河架构师】,发现更多精彩内容。

    技术资料领取方法:关注公众号,回复微服务,领取微服务相关电子书;回复MK精讲,领取MK精讲系列电子书;回复JAVA 进阶,领取JAVA进阶知识相关电子书;回复JAVA面试,领取JAVA面试相关电子书,回复JAVA WEB领取JAVA WEB相关电子书。

  • 相关阅读:
    大数据的前景?
    PriorityBlockingQueue深度解析(好文)
    深入CAS原理
    common-lang3工具类-使用手册
    gitlab搭建
    RestTemplate转码bug
    论tigergraph边的方向性
    关于java的wait方法的深入分析
    openjdk的源码下载方式
    一个奇怪的urlencode转码问题
  • 原文地址:https://www.cnblogs.com/luas/p/12201421.html
Copyright © 2020-2023  润新知