zoukankan      html  css  js  c++  java
  • feign携带token;springboot多模块直接携带认证信息调用参数;shiro/url过滤

    场景:

    security模块、system模块;打成一个jar包,security通过shiro进行登录验证;

    业务:

    第一步:登陆;

    第二步:请求security中queryUser()接口,然后queryUser()接口会调用system模块中的某一个类,比如queryLic();

    问题:

    因为模块之间是通过feign连接的,也就是http请求,所以每一个url都会走security的shiro验证,但是在第二步验证的时候会出现获取不到登陆信息的情况;

    解决方法:

    feign中可以携带token信息,带上去进行验证;

    在security添加配置类:

    import javax.servlet.http.HttpServletRequest;
    
    /**
     * 跨模块获取登录信息
     * author shichangle
     * date 2020/2/20 0020 16:11
     */
    @Configuration
    public class FeignConfig implements RequestInterceptor {
        @Override
        public void apply(RequestTemplate requestTemplate) {
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    
            HttpServletRequest request = requestAttributes.getRequest();
            requestTemplate.header("postman-token",request.getHeader("postman-token"));
            requestTemplate.header("cookie",request.getHeader("cookie"));
        }
    }

    具体shiro认证代码:

         
        //获取当前登陆用户信息
        Subject subject = SecurityUtils.getSubject(); String header = ((HttpServletRequest) request).getHeader("Access-Token"); if (!subject.isAuthenticated()) { logger.error("未登录"); return false; }
  • 相关阅读:
    mysql 5.7修改密码
    使用zfs进行pg的pitr恢复测试
    什么是构造函数?它和普通函数的区别?
    匿名函数和普通函数的区别
    http缓存机制
    全局变量和局部变量
    什么是web语义化?
    ajax状态值和状态码
    如何理解MVVM?
    如果理解&&运算符和各类数值的布尔值
  • 原文地址:https://www.cnblogs.com/notchangeworld/p/12337371.html
Copyright © 2011-2022 走看看