首页 > 其他分享 >feign携带用户信息

feign携带用户信息

时间:2023-06-15 19:56:32浏览次数:41  
标签:feign 携带 request 用户 class userJson user Override public

1.通过feignConfig配置文件来携带用户信息。

2.@FeignClient(name = "user-server", configuration = {FeignConfig.class})

3.feignConfig是实现了请求拦截器的,他可以把用户信息放到requestTemplate中。在header里面放一个key(user-info)

,value是用户信息。

4.服务端,feign实现了应用程序拦截器HandlerInterceptor 。他将拦截请求,在request的header中取出key(user-info),如果错误就返回请求。如果成功就通过。

@Configuration
@Slf4j
public class FeignConfig implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
HttpServletRequest request = getServletRequest();
if (null == request) {
return;
}
UserInfo user = (UserInfo) SecurityUtils.getSubject().getPrincipal();
if (user != null) {
try {
String userJson = JSON.toJSONString(user);
requestTemplate.header("USER_INFO", new String[]{URLDecoder.decode(userJson, "UTF-8")});
} catch (UnsupportedEncodingException e) {
log.error("用户信息设置错误", e);
}
}
}

private HttpServletRequest getServletRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
}

}
2.fegin 调用配置,加上配置 configuration = {FeignConfig.class}

@FeignClient(name = "user-server", configuration = {FeignConfig.class})
public interface WebUserClient extends UserClient {
}
3.然后服务方 拦截请求 获取 request.getHeader("USER_INFO") 用户信息

@Slf4j
public class AuthorizationInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
String userJson = request.getHeader("USER_INFO");
if (StringUtils.isNotBlank(userJson)) {
try {
userJson = URLDecoder.decode(userJson, "UTF-8");
UserInfo userInfo = JSON.parseObject(userJson, UserInfo.class);
//将UserInfo放入上下文中
UserContext.set(userInfo);
} catch (UnsupportedEncodingException e) {
log.error("init userInfo error", e);
}
}
return true;
}

@Override
public void postHandle(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
Object o, ModelAndView modelAndView) {

}

@Override
public void afterCompletion(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
Object o, Exception e) {

//关闭threadLocal
UserContext.remove();
}
}
@Configuration
public class WebInterceptorAdapter implements WebMvcConfigurer {

@Bean
public HandlerInterceptor getTokenInterceptor() {
return new AuthorizationInterceptor();
}

@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
AntPathMatcher pathMatcher = new AntPathMatcher();
pathMatcher.setCaseSensitive(false);
configurer.setPathMatcher(pathMatcher);
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getTokenInterceptor());
}

标签:feign,携带,request,用户,class,userJson,user,Override,public
From: https://www.cnblogs.com/zqlmianshi/p/17483957.html

相关文章

  • sftp 设置仅能访问自己目录的用户
    1.创建一个目录,owner为root,权限为750或755,此处为/home/test01添加一个用户test01,home目录设置为/home/test01再创建一个子目录用于用户上传:/home/test01/upload,owner为test01,$mkdir/home/test01$chownroot:test01/home/test01$mkdir/home/test01/upload$chownt......
  • 公众号已关注用户,扫描带参二维码没有事件(SCAN)推送?公众号认证权限
    公众号启用了服务器配置,关注、取消关注事件,CLICK事件,服务器都能收到事件推送,但是没有扫描带参二维码事件(SCAN)推送公众号需要认证才支持公众号认证权限:权限......
  • SAP查找用户的登录记录及修改记录
    1、可以使用USR02中有个上次登陆日期和登陆时间。  2、用SE38跑下RSUSR200,输入用户名即可查询上次登陆日期 3、SU10可以查到 4、USH02可以查找用户的修改记录  ......
  • mysql8.0创建新用户
     查看当前用户usemysql;selectcurrent_user();或者:selectUser,authentication_string,Hostfromuser;查看权限showgrantsfor'user'@'ip';或者showgrants;创建一个给新用户的数据库createdatabasetestDatabase;创建新用户同时配置给该用户testData......
  • springboot-feign接口压缩异常
    WARNorg.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver-Resolved[org.springframework.http.converter.HttpMessageNotReadableException:JSONparseerror:Illegalcharacter((CTRL-CHAR,code31)):onlyregularwhitespace(\r,\......
  • 云服务器创建普通用户
    今天由于有点小东西,需要添加一个普通用户,并配置ssh登录,然后搞了很久,有点尴尬,mark一下可以看下这篇blog:传送门如果不想和root一个group的话,可以先添加一个groupsudogroupaddtest然后添加用户,分配组,配置用户的文件位置,常规操作:sudouseradd-d/home/test-gtest-s/bin/bashte......
  • NVC低功耗语音芯片制氧机方案,提升用户体验同时降低开发成本
    家用制氧机是一种可以通过空气中提取氧气,制造出高浓度的氧气供给需要氧气治疗的患者使用的设备。为了提高用户使用体验和操作便捷性。很多厂商会通过加入语音芯片实现语音提示功能,用户可以通过听到语音提示来了解制氧机的状态和操作指引,从而更加方便地使用制氧机。 那么家用......
  • 真实案例:Feign 切换 okhttp 无法生效,被老大骂的有点慌!
    来源:https://www.cnblogs.com/mufeng3421/p/11442412.html提示:如果只看如何解决问题,请看文章的末尾如何解决这个问题1.场景描述最近项目中使用了feign当做http请求工具来使用、相对于httpclient、resttemplate来说,fegin用起来方便很多。然后项目有httptrace的需求,需要输出请求......
  • 博睿数据应邀出席第五届双态IT北京用户大会,分享《如何帮助用户构建高级可观测性》
    6月10日,第五届双态IT北京用户大会在北京召开,来自IT行业的各位专家齐聚一堂,分享行业理念、发展趋势、运维方法以及最佳实践。博睿数据应邀出席大会,作《如何帮助用户构建高级可观测性》主题演讲,从云原生带来的挑战和思考、一体化平台以及智能高级可观测性等四方面介绍了博睿数据如何......
  • 1817.查找用户活跃分钟数
    问题描述1817.查找用户活跃分钟数(Medium)给你用户在LeetCode的操作日志,和一个整数k。日志用一个二维整数数组logs表示,其中每个logs[i]=[IDᵢ,timeᵢ]表示ID为IDᵢ的用户在timeᵢ分钟时执行了某个操作。多个用户可以同时执行操作,单个用户可以在同一分钟内......