登录用户信息获取 网关+拦截器+feign请求添加请求头

这篇具有很好参考价值的文章主要介绍了登录用户信息获取 网关+拦截器+feign请求添加请求头。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

给所有请求添加用户身份

登录用户信息获取 网关+拦截器+feign请求添加请求头

微服务获取用户身份

网关已经给所有请求添加了用户身份,也就是authorization头信息。

登录用户信息获取 网关+拦截器+feign请求添加请求头

登录用户信息获取 网关+拦截器+feign请求添加请求头 

创建ThreadLocal工具类 :

package com.hmall.order.utils;

public class UserHolder {
    private static final ThreadLocal<Long> tl = new ThreadLocal<>();

    public static void setUser(Long userId) {
        tl.set(userId);
    }

    public static Long getUser() {
        return tl.get();
    }

    public static void removeUser() {
        tl.remove();
    }
}

创建拦截器: 

package com.hmall.order.interceptor;

import com.hmall.order.utils.UserHolder;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@slf4j
public class UserInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //1.获取请求头
        String authorization = request.getHeader("authorization");
        if (StringUtils.isBlank(authorization)) {
         
         log.warn("非法用户访问!请求路径:{}",request.getRequestURI());
            //没有用户信息,未登录
            throw new RuntimeException("用户未登录");            
            //或者 return false; response.setStatus(403);
        }
        //2.转换用户id
        Long userId = Long.valueOf(authorization);
        //3.存入ThreadLocal
        UserHolder.setUser(userId);
        //4.放行
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        //用完清理掉
        UserHolder.removeUser();
    }
}

将拦截器注册到SpringMvc,让它生效:

package com.hmall.order.config;

import com.hmall.order.interceptor.UserInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //默认的拦截路径就是/**  ,excludePathPatterns()是不用拦截的路径
//      registry.addInterceptor(new UserInterceptor()).addPathPatterns("/**").excludePathPatterns();
      registry.addInterceptor(new UserInterceptor());
    }
}

 将以上代码(拦截器,config,utils) 放到哪个微服务中,哪个微服务/**路径就会有拦截功能

没有用户信息的请求将会被拦截

给所有有feign的请求,将用户信息添加请求头:

package com.hmall.order.config;

import feign.RequestInterceptor;
import feign.RequestTemplate;

public class MyFeignInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        requestTemplate.header("authorization","2");
    }
}

 配置好后通过路径访问的将被拦截,但是通过网关的就可以访问:

http://localhost:8083/order/123865420 被拦截 

http://localhost:10010/order/123865420 可访问

如果想不从网关,实现服务之间调用服务, 将controller层的 被调用的方法开放一个接口到feign.

登录用户信息获取 网关+拦截器+feign请求添加请求头 

然后再调用者的启动类添加 :上面的包路径要填写一致

登录用户信息获取 网关+拦截器+feign请求添加请求头

注:(记得导feign的包到服务的pom.xml中) 

这样因为feign请求头有用户信息通过feign之间调用服务就不会收拦截 

 文章来源地址https://www.toymoban.com/news/detail-491199.html

 

 

 

 

 

 

 

 

到了这里,关于登录用户信息获取 网关+拦截器+feign请求添加请求头的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 统一功能处理(拦截器实现用户登录权限的统一校验、统一异常返回、统一数据格式返回)

    目录 1. 用户登录权限校验 1.1 最初用户登录权限效验 1.2 Spring AOP 用户统⼀登录验证 1.3 Spring 拦截器 (1)创建自定义拦截器 (2)将自定义拦截器添加到系统配置中,并设置拦截的规则 1.4 练习:登录拦截器 (1)实现 UserController 实体类 (2)返回的登录页面:login.html (3)实

    2024年02月12日
    浏览(50)
  • 3-3. SpringBoot项目集成【用户身份认证】实战 【全流程篇】基于JWT+双重检查的登录+登出+拦截器

    书接上文 实战核心篇,我们已经 把JWT的核心代码实现了! 文中不止是代码实现,更是使用到了设计原则,提升大家的内功心法。并且抛转引玉的实现了RSA和HMAC两种算法,还没看过的同学,建议先看上文。所以对于 基于JWT的Token用户身份认证机制 来说,剩下的就是与接口结

    2023年04月16日
    浏览(49)
  • Gateway网关拦截器的ServerWebExchange

     ServerWebExcahnge的解释如下: Contract for an HTTP request-response interaction. Provides access to the HTTP request and response and also exposes additional server-side processing related properties and features such as request attributes. 大概是说:ServerWebExchange是一个HTTP请求-响应交互的契约。提供对HTTP请求和响应的访问

    2024年04月10日
    浏览(50)
  • SpringBoot加入拦截器——登录拦截器的实现

            拦截器 Interceptor 在 Spring MVC 中的地位等同于 Servlet 规范中的过滤器 Filter,拦截的是处理器的执行,由于是全局行为,因此常用于做一些通用的功能,如请求日志打印、权限控制等。         核心原理:AOP思想 preHandle:  预先处理,在目标的controller方法执行之前,进行

    2024年02月15日
    浏览(43)
  • SpringCloud GateWay网关通过全局拦截器GlobalFilter实现API日志

    产品经理突然找到我说,咱们这个产品貌似没有实现之前旧的系统平台操作日志了;希望我尽快实现这个需求,以应对一些检查;因为时间关系再加上人员问题,跟我原先规划得有些背道而驰 1.写一个AOP日志Starter,再需要的模块中引入,对应方法去标记注解,工程量比较大,

    2024年02月11日
    浏览(53)
  • springboot web开发登录拦截器

    在SpringBoot中我们可以使用HandlerInterceptorAdapter这个适配器来实现自己的拦截器。这样就可以拦截所有的请求并做相应的处理。 应用场景 日志记录,可以记录请求信息的日志,以便进行信息监控、信息统计等。 权限检查:如登陆检测,进入处理器检测是否登陆,如果没有直接

    2024年02月10日
    浏览(36)
  • vue+axios——创建多个实例共用请求拦截器和响应拦截器(403错误信息不提示bug解决)——基础积累

    创建多个实例共用请求拦截器和响应拦截器:使用的是函数的继承,也就是 call() 方法,这个方法第一个参数就是 this ,后面的参数可以是一个也可以是多个。最后一定要记得要 return 出去,否则接口是拿不到数据的。 上面两个文件合并后的处理如下: 在 main.js 中添加如下内容

    2024年02月10日
    浏览(50)
  • 登录页面jwt密钥,过滤器,拦截器,异常处理

    需求: 用户未登录时,访问其他也没面,操作添加、删除等操作时,强行跳转至登录页面。 实现方法: 1.使用Cookie,登录后后端添加一个cookie,每次页面判断是否有cookie, 2。使用session,原理同上,只不过session是存储在服务器里的,cookie是在浏览器里。 3。使用jwt令牌,登

    2023年04月25日
    浏览(53)
  • 登录认证方式汇总,例如ThreadLocal+拦截器+Redis、JWT

    先讲讲传统的登录方式 用cookie作为媒介存放用户凭证。 用户登录系统之后,会返回一个加密的cookie,当用户访问子应用的时候会带上这个cookie,授权以解密cookie并进行校验,校验通过后即可登录当前用户。 缺点: Cookie不安全,Cookie是存到客户端的,攻击者可以伪造Cookie伪造

    2024年02月07日
    浏览(44)
  • Vue3 axios响应拦截器处理接口返回401未登录跳转登录页

    问题: 在 asiox 使用 useRouter 实例化创建 router 路由对象,在 response 响应拦截器里为 undefined 访问不到 使用 window.location.href = \\\'/login\\\' 跳转登录页, 本地可以正常跳转,测试环境页面会显示 not found 404, 测试环境访问地址大概是这样 ip:8080/pm/#/login , 本地没有 /pm 解决方案: 在 mai

    2024年01月21日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包