• 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; }
  • 相关阅读:
    Linux远程连接Windows桌面
    Ubuntu telnet
    Linux Source命令及脚本的执行方式解析(转)
    Java图形与文本(18)
    从把3000行代码重构成15行代码谈起
    学习:java原理—反射机制
    BugFix系列---开篇介绍
    回调函数透彻理解Java
    Java回调函数的理解
    Java注解浅谈
  • 原文地址:https://www.cnblogs.com/notchangeworld/p/12337371.html
Copyright © 2020-2023  润新知