场景:

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

 

相关文章:

  • 2022-01-28
  • 2022-02-17
  • 2021-08-05
  • 2021-11-15
  • 2022-12-23
  • 2022-12-23
  • 2021-07-16
  • 2021-05-23
猜你喜欢
  • 2022-12-23
  • 2021-11-20
  • 2021-08-15
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案