場景:
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; }