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;
22 public class SimpleUserTransmitGatewayFilterFactory extends AbstractGatewayFilterFactory<SimpleUserTransmitGatewayFilterFactory.Config> {
24 public SimpleUserTransmitGatewayFilterFactory() {
29 public GatewayFilter apply(Config config) {
30 return (exchange, chain) -> {
33 // Mono<ServerWebExchange> m = Mono.fromCallable(() ->{
34 // MyUser myUser = ReactiveSecurityContextHolder.getContext()
35 // .filter(c -> c.getAuthentication() != null)
36 // .map(SecurityContext::getAuthentication)
37 // .map(Authentication::getPrincipal)
38 // .cast(MyUser.class)
42 // String jsonUser = JSONObject.toJSONString(myUser);
43 // log.info(jsonUser);
44 // String headerValue = new String(URLDecoder.decode(jsonUser,"UTF-8"));
45 // ServerHttpRequest request = exchange.getRequest().mutate()
46 // .header(UserContext.KEY_USER_IN_HTTP_HEADER, headerValue)
48 // log.debug("User set ok");
49 // return exchange.mutate().request(request).build();
50 // } catch (Exception e) {
51 // log.warn("User set error", e);
55 // .publishOn(Schedulers.elastic())
57 // return m.flatMap(ex -> chain.filter(ex));
60 return ReactiveSecurityContextHolder.getContext()
61 .filter(c -> c.getAuthentication() != null && c.getAuthentication().isAuthenticated() && c.getAuthentication().getPrincipal() instanceof MyUser)
62 .map(SecurityContext::getAuthentication)
63 .map(Authentication::getPrincipal)
67 User user = new User(myUser.getUsername(), myUser.getRoles(), myUser.getAttributes());
69 String jsonUser = JSONObject.toJSONString(user);
71 String headerValue = new String(URLDecoder.decode(jsonUser,"UTF-8"));
72 ServerHttpRequest request = exchange.getRequest().mutate()
73 .header(UserContext.KEY_USER_IN_HTTP_HEADER, headerValue)
75 log.debug("User set ok");
76 return exchange.mutate().request(request).build();
77 } catch (Exception e) {
78 log.warn("User set error", e);
82 .flatMap(ex -> chain.filter(ex))
87 public static class Config {