在自己平台使用第三方平台的Token

首先需要创建一个过滤器用来过滤第三方平台的Token

/**
 * 第三方平台token过滤器 验证token有效性
 */
@Component
public class ExternalTokenFilter extends OncePerRequestFilter {

    @Autowired
    private TokenService tokenService;
    @Autowired
    private ISysConfigService sysConfigService;

    // 在访问接口前会先走该方法
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
            throws ServletException, IOException {
        
        // 从头部获取token
        String token = request.getHeader("External-Token");

        // 判断是否为空
        if (externalToken != null) {
            // 校验通过,获取其他平台的用户信息
            LoginUser loginUser = parseExternalUserInfo(token);

            // 创建一个UsernamePasswordAuthenticationToken对象,用于存储用户的认证信息
            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());

            // 设置authenticationToken的详细信息,包括请求的来源等
            authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));

            // 将authenticationToken设置到SecurityContextHolder中,以便后续的安全操作可以使用该认证信息
            SecurityContextHolder.getContext().setAuthentication(authenticationToken);
        }
        chain.doFilter(request, response);
    }
    
    // 自定义的处理其他逻辑的方法可有可无
    // 这里的 LoginUser 就是自定义的一个对象
    private LoginUser parseExternalUserInfo(String token) {
        // 在这里解析或获取其他平台的用户信息,将其转换为LoginUser对象
        // ...
    }
}

下面则是需要在SecurityConfig这个配置文件中去配置该过滤器

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private ExternalTokenFilter externalTokenFilter;

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.csrf().disable()
                .authorizeRequests()
                .antMatchers("/api/auth/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .headers().frameOptions().disable();
        // 添加filter
        httpSecurity.addFilterBefore(externalTokenFilter, UsernamePasswordAuthenticationFilter.class);
        

        // 若已有处理TOKEN的filter则可以这样写 假设已有的名称为 tokenFilter
        // httpSecurity.addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class);
        // 这个意思就是先走 externalTokenFilter 过滤器然后在走 tokenFilter 过滤器
        // 若不配置则配置了哪一个就先运行哪一个
        // httpSecurity.addFilterBefore(externalTokenFilter, TokenFilter.class);
    }
}

 至此则是配置完成,接下来就是根据每个项目的不同来进行细节的改变

就比如需要第三方平台的用户信息与本平台的字段对应不上或其他问题来进行修改

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值