java中关于第三方应用的权限校验方案

前言

在有些场景中需要使用到组合开发(系统一需要使用到系统二所提供的接口,但是系统一已经拥有自己的一套检验逻辑,并且系统二希望使用系统一中的用户进行权限检验),这时就。。。。卧槽!什么乱七八糟的,不知道该怎么讲。就说我现在的应用场景吧!

本公司把项目外包给乙放。然后一些重要的接口又不想要交给乙方完成,就有自己公司来提供接口,给乙方调用。且乙方项目中的用户进行权限校验。提供接口的程序并没有自己的用户。

当然仅仅作为参考,取之长嵌入到自己公司项目中去,取之短反馈给我,我这边及时改进。

事先准备

1.spring-boot 2.2.5.RELEASE
2.mysql数据库两台(一台记录用户操作,另一台负责连接用户表,获取相关用户信息)

实现步骤

一、新建spring boot项目,并引入依赖

在pom文件中引入所需要的依赖包

	<!-- 添加Web依赖(servlet) -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- 引入lombak插件 -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>

	<!-- swagger2 -->
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>${springfox.swagger2.version}</version>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>${springfox.swagger2.version}</version>
    </dependency>
    
	<dependency>
      <groupId>dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>1.6</version>
    </dependency>
    
	<!--使用 Spring Data JPA -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    
    <!-- mysql 链接依赖包 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>

	<!-- JWT算法 -->
    <dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>0.7.0</version>
    </dependency>

    <!-- JSON 转换 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.56</version>
    </dependency>

二、配置多数据源

配置多个数据源(这里因为一个数据源要存储数据,另一个数据源为了获取其他应用的用户信息)。该多数据源方案仅供参考。

1.修改配置文件
spring:
  application:
    name: yqzl
  datasource:
    yqzl:
      pool: com.zaxxer.hikari.HikariDataSource
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: XXXXXX
      jdbc-url: jdbc:mysql://192.168.1.1:3306/XXX?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
    user:
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: XXXXXX
      jdbc-url: jdbc:mysql://192.168.1.2:3306/XXX?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: false
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    open-in-view: false
2.创建切换数据源注解
@Target({
   ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CurDataSource {
   

    String value() default "";

}
3.创建数据源类,读取配置文件中配置的数据源
@Component
@Data
@ConfigurationProperties(prefix ="spring.datasource")
@EnableConfigurationProperties
public class DBproperties {
   

    private HikariDataSource yqzl;

    private HikariDataSource user;

}
3.创建DynamicDataSource类扩展Spring的AbstractRoutingDataSource抽象类,重写 determineCurrentLookupKey() 方法
/**
 * DynamicDataSource扩展Spring的AbstractRoutingDataSource抽象类,重写 determineCurrentLookupKey() 方法
 */
public class DynamicDataSource extends AbstractRoutingDataSource {
   

    /**
     * ThreadLocal 用于提供线程局部变量,在多线程环境可以保证各个线程里的变量独立于其它线程里的变量。
     * 也就是说 ThreadLocal 可以为每个线程创建一个【单独的变量副本】,相当于线程的 private static 类型变量。
     */
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值