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; }
  • 相关阅读:
    cri-o 与 cni的集成分析
    ocacle sql: 两张表左连接 ,1对多,取一条数据,取按时间最新的
    redis jedis pool 高并发的问题
    Redis事件订阅和持久化存储
    Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
    springboot配置redis
    Spring Boot使用Redis进行消息的发布订阅
    Spring boot中使用aop详解
    springBoot 全局异常捕捉
    pring boot中使用aop详解
  • 原文地址:https://www.cnblogs.com/notchangeworld/p/12337371.html
Copyright © 2011-2022 走看看