网关鉴权后下游统一filter获取用户信息

1. 场景描述

最近有点忙,在弄微服务nacos+springcloud gateway这块工作,以前只是简单应用,这次因为要对接10几个系统或者平台,还的鉴权,等后续稍微闲点了,把这块东西总结下。
刚好要写个文档,就一起发出来,场景是其他系统,gateway中鉴权成功后(过来的是加密token),会将个人信息信息会写到header中,比如手机号、姓名、部门等,为了方便下游系统获取信息,让写一个统一的filter,下游只需注入这个filter就能拿到用户信息,避免大家都的反复解析,还容易出错。

gav:

      <dependency>
            <groupId>com.raunjianlaowang.gateway</groupId>
            <artifactId>ruanjianlaowang_gateway_filter</artifactId>
            <version>1.0.0</version>
        </dependency>

2. 使用规则

(1) 业务或下游系统注入这个GateWayFilter

/**
 * 只需要@bean就可以了,也可以放到其他地方,注入。
 * @auther: 软件老王
 */
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args) ;
    }
    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        GateWayFilter gwAuthFilter = new GateWayFilter();
        registrationBean.setFilter(gwAuthFilter);
        List<String> urlPatterns = new ArrayList<String>();
        urlPatterns.add("/*");
        registrationBean.setUrlPatterns(urlPatterns);
        return registrationBean;
    }
}

(2)实体类,只需继承Param类即可:

/**
 *实体类,只需继承param类(网关提供)即可
 * @auther: 软件老王
 */
public class AppParam extends Param {

}

(3)在controller中就通过AppParam接,里面就有值了。

/**
 * controller类,用户信息已经存在request中了,请求的时候用AppParam就能自动注入数据了。
 * @auther: 软件老王
 */
    @RequestMapping
    @ResponseBody
    public VO home(AppParam appParam) {
        return  new VO("111","11111","22222");
    }

I’m 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!

posted @ 2019-09-29 08:53  软件老王  阅读(1136)  评论(2编辑  收藏  举报