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

gateway结合jwt的token校验,网关跨域处理

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

gateway结合jwt的token校验,网关跨域处理

网关过滤

@Component
@Slf4j
public class JwtWebFilter implements GlobalFilter, Ordered {
    @Value("${jwt.secret_key}")
    private String secretKey;
    @Value("${jwt.excluded_auth_url}")
    private String excludedAuthUrl;
    @Override
    public int getOrder() {
        return -100;
    }
    
    @Override
    public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        ServerHttpResponse resp = exchange.getResponse();
        ServerHttpRequest request = exchange.getRequest();
        String[] excludedAuthUrlArr = excludedAuthUrl.split(",");
        String path = request.getPath().value();
        List tokenList = request.getHeaders().get("auth-token");
        //排除url直接放行
        if(!path.contains("/sastWeb/")){
            return chain.filter(exchange);
        }
        if (CollectionUtils.isEmpty(tokenList)) {
            log.info("JwtWebFilter.filter->请求未携带token");
            return authErro(resp,"登录过期,请重新登录");
        }
        String token = tokenList.get(0);
        //排除小程序端的的url直接放行
        if(Arrays.asList(excludedAuthUrlArr).contains(path)){
            return chain.filter(exchange);
        }
        //判断token是否过期
        if (JwtTokenUtils.isExpiration(token, secretKey)) {
            log.info("JwtWebFilter.filter->token时间过期");
            return authErro(resp,"登录过期,请重新登录");
        }
        return chain.filter(exchange);

    }

    
    private Mono authErro(ServerHttpResponse resp, String mess) {
        Gson gson=new Gson();
        resp.setStatusCode(HttpStatus.FORBIDDEN);
        resp.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
        ResponseVO resultData = ResponseVO.newInstance(ErrorCodeEnum.ErrorCode.NOT_ACCEPTABLE);
        String returnStr = "";
        try {
            returnStr = gson.toJson(resultData);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        DataBuffer buffer = resp.bufferFactory().wrap(returnStr.getBytes(StandardCharsets.UTF_8));
        return resp.writeWith(Flux.just(buffer));
    }

}
 

GlobalFilter是gateway里面的过滤器

网关添加跨域
jar依赖


			io.jsonwebtoken
			jjwt
			0.9.1
		
@Configuration
public class GwCorsFilter {


    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();

        config.setAllowCredentials(true); // 允许cookies跨域
        config.addAllowedOriginPattern("*");// #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin
        config.addAllowedHeader("*");// #允许访问的头信息,*表示全部
        config.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
        config.addAllowedMethod("OPTIONS");// 允许提交请求的方法类型,*表示全部允许
        config.addAllowedMethod("HEAD");
        config.addAllowedMethod("GET");
        config.addAllowedMethod("PUT");
        config.addAllowedMethod("POST");
        config.addAllowedMethod("DELETE");
        config.addAllowedMethod("PATCH");
        config.addExposedHeader("auth-token");


        org.springframework.web.cors.reactive.UrlbasedCorsConfigurationSource source =
                new org.springframework.web.cors.reactive.UrlbasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

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

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

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