栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

基于springcloud+springsecurity Oauth2.0+Jwt分布式系统项目的搭建

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于springcloud+springsecurity Oauth2.0+Jwt分布式系统项目的搭建

基于springcloud+springsecurity Oauth2.0+Jwt分布式系统项目的搭建
  • 1.环境准备
    • 1.1 系统需求分析
  • 2.搭建流程
    • 2.1 父工程搭建
    • 2.2 注册中心搭建
    • 3.1 网关服务搭建
  • 源码链接

1.环境准备
工具版本
spring boot2.0.2.RELEASE
spring cloud2.1以上版本
jdk1.8
mybatis-plus3.2.0

注意:springboot和springCloud版本需对应,springboot版本不能比springcloud版本高,否则启动会失败且会报错。

1.1 系统需求分析

2.搭建流程 2.1 父工程搭建


pom文件



    4.0.0

    com.immortal.oauth
    springCloudOauth2
    1.0-SNAPSHOT
    
        distributed_security_uaa
        distributed_security_order
        distributed_security_discovery
        distributed_security_gateway
    
    pom

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.2.RELEASE
    
    
        1.8
        4.0.1
        2.3.28
        1.2.47
        3.2.0
        3.2.0
        1.7
        4.1.6
        2.9.2
        1.5.21
        2.9.2
    
    

        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Finchley.RELEASE
                pom
                import
            
            
            
                javax.servlet
                javax.servlet-api
                ${servlet.version}
                provided
            
            
                javax.interceptor
                javax.interceptor-api
                1.2
            

            
                com.alibaba
                fastjson
                1.2.47
            
            
                org.projectlombok
                lombok
                1.18.0
            
            
                mysql
                mysql-connector-java
                runtime
            
            
                org.springframework.security
                spring-security-jwt
                1.0.10.RELEASE
            

            
                org.springframework.security.oauth.boot
                spring-security-oauth2-autoconfigure
                2.1.3.RELEASE
            
        
    

    
        ${project.name}
        
            
                src/main/resources
                true
                
                    ***.xml
                
            
        
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
            
            
                org.apache.maven.plugins
                maven-resources-plugin
                3.2.0
                
                    utf‐8
                    true
                
            
        
    

2.2 注册中心搭建

注册中心是注册、发现以及管理服务的,只需一个配置文件和启动类。
模块包结构:

pom文件:



    
        springCloudOauth2
        com.immortal.oauth
        1.0-SNAPSHOT
    
    4.0.0

    distributed‐security‐discovery
    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
            2.1.2.RELEASE
        
        
            org.springframework.boot
            spring-boot-starter-actuator
            2.2.1.RELEASE
        
    


配置文件application.yml:


spring:
  application:
    name: distributed-discovery
server:
  port: 53000
eureka:
  server:
    enable-self-preservation: false
    eviction‐interval‐timer‐in‐ms: 10000
    shouldUseReadOnlyResponseCache: true
  client:
    register-with-eureka: false
    fetch-registry: false
    instance-info-replication-interval-seconds: 10
    service-url:
      defaultZone: http://localhost:${server.port}/eureka/

启动类:

@SpringBootApplication
@EnableEurekaServer
public class DiscoveryServer {
public static void main(String[] args) {
SpringApplication.run(DiscoveryServer.class, args);
}
}
3.1 网关服务搭建

模块包结构:

pom文件:



    
        springCloudOauth2
        com.immortal.oauth
        1.0-SNAPSHOT
    
    4.0.0

    distributed‐security‐gateway
    
        UTF-8
        1.8
        4.0.1
        2.3.28
        1.2.47
        3.2.0
        3.2.0
        1.7
        4.1.6
        2.9.2
        1.5.21
        2.9.2
    
    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
            2.1.2.RELEASE
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-ribbon
            2.0.1.RELEASE
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-hystrix
            2.0.0.RELEASE
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
            2.0.2.RELEASE
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-zuul
            2.1.2.RELEASE
        
        
        
            javax.servlet
            javax.servlet-api
            ${servlet.version}
            provided
        
        
        
            javax.servlet
            jstl
        

        
            org.freemarker
            freemarker
            ${freemarker.version}
        


        
            com.netflix.hystrix
            hystrix-javanica
            1.4.7
        

        
            org.springframework.retry
            spring-retry
            1.2.4.RELEASE
        
        
            org.springframework.boot
            spring-boot-starter-actuator
            2.1.3.RELEASE
        
        
            org.springframework.boot
            spring-boot-starter-web
            2.0.2.RELEASE
        

        
            org.springframework.boot
            spring-boot-starter-freemarker
            2.0.3.RELEASE
        

        
            org.springframework.data
            spring-data-commons
            2.1.1.RELEASE
        
        
            org.springframework.cloud
            spring-cloud-starter-security
            2.0.0.RELEASE
        

        
            org.springframework.cloud
            spring-cloud-starter-oauth2
            2.1.2.RELEASE
        


        
            org.springframework.security
            spring-security-jwt
            1.0.10.RELEASE
        

        
            javax.interceptor
            javax.interceptor-api
            1.2
        

        
            com.alibaba
            fastjson
        
        
            org.projectlombok
            lombok
        
        
        
            io.springfox
            springfox-swagger2
            ${springfox-swagger2.version}
            
                
                    io.swagger
                    swagger-annotations
                
            
        
        
            io.swagger
            swagger-annotations
            ${swagger-annotations.version}
        
        
            io.springfox
            springfox-swagger-ui
            ${springfox-swagger-ui.version}
        
    


配置文件application.properties:

spring.application.name=gateway-server
server.port=53010
spring.main.allow-bean-definition-overriding = true

logging.level.root = info
logging.level.org.springframework = info

zuul.retryable = true
zuul.ignoredServices = *
zuul.add-host-header = true
zuul.sensitiveHeaders = *
zuul.routes.uaa‐service.stripPrefix = false
zuul.routes.uaa‐service.path = /uaa/**
zuul.routes.uaa‐service.service-id=uaa‐service
zuul.routes.order-service.stripPrefix = false
zuul.routes.order‐service.path = /order/**
zuul.routes.order‐service.service-id=order‐service

eureka.client.serviceUrl.defaultZone = http://localhost:53000/eureka/
eureka.instance.preferIpAddress = true
eureka.instance.instance-id = ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}}
management.endpoints.web.exposure.include = refresh,health,info,env

feign.hystrix.enabled = true
feign.compression.request.enabled = true
feign.compression.request.mime-types[0] = text/xml
feign.compression.request.mime-types[1] = application/xml
feign.compression.request.mime-types[2] = application/json
feign.compression.request.min-request-size = 2048
feign.compression.response.enabled = true

资源服务配置ResouceServerConfig

package com.immortal.oauth.gateway.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
import org.springframework.security.oauth2.provider.token.TokenStore;

@Configuration
public class ResouceServerConfig {
    public static final String RESOURCE_ID = "res1";

    @Configuration
    @EnableResourceServer
    public class UAAServerConfig extends ResourceServerConfigurerAdapter {
        @Autowired
        private TokenStore tokenStore;

        @Override
        public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
            resources.tokenStore(tokenStore)
                    .resourceId(RESOURCE_ID)
                    .stateless(true);
        }

        @Override
        public void configure(HttpSecurity http) throws Exception {
           http.authorizeRequests()
                   .antMatchers("/uaa/**").permitAll();
        }
    }

    @Configuration
    @EnableResourceServer
    public class OrderServerConfig extends ResourceServerConfigurerAdapter{
        @Autowired
        private TokenStore tokenStore;

        @Override
        public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
            resources.tokenStore(tokenStore)
                    .resourceId(RESOURCE_ID)
                    .stateless(true);
        }

        @Override
        public void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
                    .antMatchers("/order/**").access("#oauth2.hasScope('ROLE_API')");
        }


    }
}

源码链接

后续源码可移驾至以下链接获取
gitee链接地址:https://gitee.com/immortal90/spring-colud-oauth2.git

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/602669.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号