1 package com.supwisdom.institute.backend.admin.bff.gateway.filter.factory;
3 import java.net.URLDecoder;
7 import lombok.extern.slf4j.Slf4j;
9 import org.springframework.cloud.gateway.filter.GatewayFilter;
10 import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
11 import org.springframework.http.server.reactive.ServerHttpRequest;
12 import org.springframework.security.core.Authentication;
13 import org.springframework.security.core.context.ReactiveSecurityContextHolder;
14 import org.springframework.security.core.context.SecurityContext;
16 import com.alibaba.fastjson.JSONObject;
17 import com.supwisdom.institute.backend.admin.bff.security.core.userdetails.MyUser;
18 import com.supwisdom.institute.backend.common.core.transmit.user.User;
19 import com.supwisdom.institute.backend.common.core.transmit.user.UserContext;
23 public class SimpleUserTransmitGatewayFilterFactory extends AbstractGatewayFilterFactory<SimpleUserTransmitGatewayFilterFactory.Config> {
25 public SimpleUserTransmitGatewayFilterFactory() {
30 public GatewayFilter apply(Config config) {
31 return (exchange, chain) -> {
34 // Mono<ServerWebExchange> m = Mono.fromCallable(() ->{
35 // MyUser myUser = ReactiveSecurityContextHolder.getContext()
36 // .filter(c -> c.getAuthentication() != null)
37 // .map(SecurityContext::getAuthentication)
38 // .map(Authentication::getPrincipal)
39 // .cast(MyUser.class)
43 // String jsonUser = JSONObject.toJSONString(myUser);
44 // log.info(jsonUser);
45 // String headerValue = new String(URLDecoder.decode(jsonUser,"UTF-8"));
46 // ServerHttpRequest request = exchange.getRequest().mutate()
47 // .header(UserContext.KEY_USER_IN_HTTP_HEADER, headerValue)
49 // log.debug("User set ok");
50 // return exchange.mutate().request(request).build();
51 // } catch (Exception e) {
52 // log.warn("User set error", e);
56 // .publishOn(Schedulers.elastic())
58 // return m.flatMap(ex -> chain.filter(ex));
61 return ReactiveSecurityContextHolder.getContext()
62 .filter(c -> c.getAuthentication() != null && c.getAuthentication().isAuthenticated() && c.getAuthentication().getPrincipal() instanceof MyUser)
63 .map(SecurityContext::getAuthentication)
64 .map(Authentication::getPrincipal)
68 User user = new User(myUser.getUsername(), myUser.getRoles(), myUser.getAttributes());
70 String jsonUser = JSONObject.toJSONString(user);
72 String headerValue = new String(URLDecoder.decode(jsonUser,"UTF-8"));
73 ServerHttpRequest request = exchange.getRequest().mutate()
74 .header(UserContext.KEY_USER_IN_HTTP_HEADER, headerValue)
76 log.debug("User set ok");
77 return exchange.mutate().request(request).build();
78 } catch (Exception e) {
79 log.warn("User set error", e);
83 .flatMap(ex -> chain.filter(ex))
88 public static class Config {