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; }

 

posted @ 2020-02-20 20:45  忧伤还是快乐EL  阅读(1600)  评论(2编辑  收藏  举报