Zuul学习(一)——登陆鉴权

1.项目模块图

2.首先得有一个eureka的服务,所有的服务都是注册到eureka上的

3.在pom.xml中引入zuul相关的依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

4.编写application.yml,这里先配置user模块的路由地址

spring:
  application:
    name: zuul
# 服务端口号
server:
  port: 9050

#Eureka 相关配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka/

# 构建路由地址
zuul:
  routes:
    # 这里可以自定义
    user: /api/user/**

5.在启动类添加相应的注解

@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class ZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class, args);
    }
}

6.编写过滤器

@Component
public class AccessFilter extends ZuulFilter {

    @Override
    public String filterType() {
        return "pre";
    }

    @Override
    public int filterOrder() {
        return -1;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() throws ZuulException {
        // 获取请求上下文
        RequestContext rc = RequestContext.getCurrentContext();
        HttpServletRequest request = rc.getRequest();
        // 获取表单中的 token
        String token = request.getParameter("token");
        // 业务逻辑处理
        if (null == token) {
            // 请求结束,不在继续向下请求。
            rc.setSendZuulResponse(false);
            // 响应状态码,HTTP 401 错误代表用户没有访问权限
            rc.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
            // 响应类型
            rc.getResponse().setContentType("application/json; charset=utf-8");
            try (PrintWriter writer = rc.getResponse().getWriter()) {
                writer.print(JSON.toJSONString(new Result(401, "未携带token")));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //TODO 通过token查询用户的信息,用户不存在也返回错误信息
        return null;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章