Spring Security Oauth2 之 核心架构配置

本文深入探讨了Spring Security Oauth2的核心架构,包括ResourceServerConfigurerAdapter资源服务器配置、AuthorizationServerConfig认证服务器配置、OAuth2AuthenticationProcessingFilter核心过滤器以及OAuth2AuthenticationManager认证管理。内容涵盖配置细节、异常处理以及设计模式的应用。此外,还提到了endPoint包下的HTTP接口和涉及的设计模式,如工厂模式、适配器模式、建造者模式、模板方法模式和发布订阅模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gitHub 链接: https://github.com/vincent9309/seurity-oauth2

1 ResourceServerConfigurerAdapter (资源服务器配置)

内部关联了ResourceServerSecurityConfigurer和HttpSecurity。前者与资源安全配置相关,后者与http安全配置相关

 @Override
    public void configure(ResourceServerSecurityConfigurer resources) {
        //resourceId 用于分配给可授予的clientId
        //stateless  标记以指示在这些资源上仅允许基于令牌的身份验证
        //tokenStore token的存储方式(上一章节提到)
        resources.resourceId(RESOURCE_ID).stateless(true).tokenStore(tokenStore)
               //authenticationEntryPoint  认证异常流程处理返回
               //tokenExtractor            token获取方式,默认BearerTokenExtractor 
               //                         从header获取token为空则从request.getParameter("access_token")
             .authenticationEntryPoint(authenticationEntryPoint).tokenExtractor(unicomTokenExtractor);
    }

其他属性:
accessDeniedHandler          权失败且主叫方已要求特定的内容类型响应
resourceTokenServices        加载 OAuth2Authentication 和 OAuth2AccessToken 的接口

eventPublisher                     事件发布-订阅  根据异常的clazz触发不同event

@Configuration
@EnableResourceServer
protected class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {

        AuthenticationManager oauthAuthenticationManager = oauthAuthenticationManager(http);
        //OAuth2核心过滤器
        resourcesServerFilter = new OAuth2AuthenticationProcessingFilter();  
        resourcesServerFilter.setAuthenticationEntryPoint(authenticationEntryPoint);
        //OAuth2AuthenticationManager,只有被OAuth2AuthenticationProcessingFilter拦截到的oauth2相关请求才被特殊的身份认证器处理。
        resourcesServerFilter.setAuthenticationManager(oauthAuthenticationManager);
        if (eventPublisher != null) {
            //同上
            resourcesServerFilter.setAuthenticationEventPublisher(eventPublisher);
        }
        if (tokenExtractor != null) {
            //同上
	    resourcesServerFilter.setTokenExtractor(tokenExtractor);
        }
        resourcesServerFilter = postProcess(resourcesServerFilter);
        resourcesServerFilter.setStateless(stateless);

        if (!Boolean.TRUE.toString().equals(apolloCouponConfig.getOauthEnable())) {
		// 不需要令牌,直接访问资源
		http.authorizeRequests().anyRequest().permitAll();
	} else {
		http
		    //.anonymous().disable()  //匿名访问
		    .antMatcher("/**")        //匹配需要资源认证路径
		    .authorizeRequests()
		    .antMatchers("/swagger-ui.html", "/swagger-resources/**",
		    "/v2/api-docs/**", "/validatorUrl","/valid"
		    ).permitAll()            //匹配不需要资源认证路径
		    .anyRequest().authenticated()
		    .and()
	             .addFilterBefore(resourcesServerFilter, AbstractPreAuthenticatedProcessingFilter.class)
		    .exceptionHandling() //添加filte
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏目 "

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值