(七)SpringCloud+Security+Oauth2--oauth2客户端公用配置抽离

一 引言

在前面的文章我们是了解到传统的分布式架构在鉴权时,是通过Gateway网关来对接口请求进行统一的客户端鉴权,这种好处就是在代码编写时,只要不经过网关我们在测试接口的不需要token就能快速反问接口,这种在平时开发时是比较遍历,但是一旦资源服务器的端口暴露,就相当于全部的接口裸露在外面,是比较危险的
但是每个资源服务的oauth2客户端配置是比较类似的,我们可以抽离出一个公用的组件,对外提供一个资源服务器注解即可,让对应的资源服务器变成oauth2的客户端,这样极大的提高了资源服务器的安全性
代码目录
在这里插入图片描述

二 代码实现

抽离oauth2公用客户端配置

public class CustomResourceServerConfigurerAdapter extends ResourceServerConfigurerAdapter {
    @Autowired
    private TokenStore tokenStore;

    @Autowired
    private ResourceServerTokenServices resourceServerTokenServices;
    @Autowired
    private PermitAllUrlResolver permitAllUrlResolver;

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.tokenStore(tokenStore);
        resources.tokenServices(resourceServerTokenServices);
    }

    @Override
    public void configure(HttpSecurity httpSecurity) throws Exception {
        /*httpSecurity.authorizeRequests()
                .antMatchers("/user/**").permitAll()
                .anyRequest().authenticated();*/
        httpSecurity.headers().frameOptions().disable();
        ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests();

        // 注册需要对外暴露的端口
        permitAllUrlResolver.registry(registry);

        registry.anyRequest().authenticated().and().csrf().disable();
    }
}

通过ImportBeanDefinitionRegistrar注入bean实例

@Slf4j
public class CncloudSecurityBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

	public static final String RESOURCE_SERVER_CONFIGURER = "resourceServerConfigurerAdapter";

	/**
	 * 根据注解值动态注入资源服务器的相关属性
	 * @param metadata 注解信息
	 * @param registry 注册器
	 */
	@Override
	public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
		if (registry.isBeanNameInUse(RESOURCE_SERVER_CONFIGURER)) {
			log.warn("本地存在资源服务器配置,覆盖默认配置:" + RESOURCE_SERVER_CONFIGURER);
			return;
		}
		GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
		beanDefinition.setBeanClass(CustomResourceServerConfigurerAdapter.class);
		registry.registerBeanDefinition(RESOURCE_SERVER_CONFIGURER, beanDefinition);

	}

}

对外提供客户端注解

@Documented
@Inherited
@EnableResourceServer
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Import(CncloudSecurityBeanDefinitionRegistrar.class)
public @interface EnableCncloudResourceServer {

}

资源服务器引入核心注解

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值